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: _client.c

+00001: ################################################################################
  __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_test, __pyx_t_4) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 00002: ##     ___                  _   ____  ____
 00003: ##    / _ \ _   _  ___  ___| |_|  _ \| __ )
 00004: ##   | | | | | | |/ _ \/ __| __| | | |  _ \
 00005: ##   | |_| | |_| |  __/\__ \ |_| |_| | |_) |
 00006: ##    \__\_\\__,_|\___||___/\__|____/|____/
 00007: ##
 00008: ##  Copyright (c) 2014-2019 Appsicle
 00009: ##  Copyright (c) 2019-2024 QuestDB
 00010: ##
 00011: ##  Licensed under the Apache License, Version 2.0 (the "License");
 00012: ##  you may not use this file except in compliance with the License.
 00013: ##  You may obtain a copy of the License at
 00014: ##
 00015: ##  http://www.apache.org/licenses/LICENSE-2.0
 00016: ##
 00017: ##  Unless required by applicable law or agreed to in writing, software
 00018: ##  distributed under the License is distributed on an "AS IS" BASIS,
 00019: ##  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 00020: ##  See the License for the specific language governing permissions and
 00021: ##  limitations under the License.
 00022: ##
 00023: ################################################################################
 00024: 
 00025: # distutils: language=c
 00026: # cython: language_level=3
 00027: # cython: binding=True
 00028: 
 00029: # Deliberately NOT `freethreading_compatible=True`. Without it the module
 00030: # declares `Py_MOD_GIL_USED`, so importing it on a free-threaded interpreter
 00031: # re-enables the GIL -- and that is what currently makes parts of this
 00032: # extension safe, notably the OIDC provider's `_renderer`, `_closed` and
 00033: # `_interrupt` slots, which native callback threads reach without
 00034: # free-threading synchronization.
 00035: # `_OIDC_ERRORS_MOD` is another Python-object read/modify/write cache and
 00036: # likewise relies on the enabled GIL. The paired OIDC registry dictionaries
 00037: # are independently protected by `_OIDC_REGISTRY_LOCK`. Native OIDC raw
 00038: # pointers are published monotonically under the GIL; GIL-released reads
 00039: # are safe only because each caller retains a strong reference to the
 00040: # owning handle/provider until the native call returns. The
 00041: # `cp314t` wheels in the CI matrix are therefore usable but gain no
 00042: # free-threading benefit, and running them under `PYTHON_GIL=0` is
 00043: # unsupported. Making the extension genuinely free-threading safe is a separate
 00044: # piece of work; until then this comment is the record of the decision.
 00045: 
 00046: """
 00047: API for fast data ingestion into and querying from QuestDB.
 00048: """
 00049: 
+00050: __all__ = [
  __pyx_t_4 = __Pyx_PyList_Pack(31, __pyx_mstate_global->__pyx_n_u_Char_2, __pyx_mstate_global->__pyx_n_u_ConnectionEvent, __pyx_mstate_global->__pyx_n_u_ConnectionEventKind, __pyx_mstate_global->__pyx_n_u_DateMillis_2, __pyx_mstate_global->__pyx_n_u_ExecDone, __pyx_mstate_global->__pyx_n_u_Geohash_2, __pyx_mstate_global->__pyx_n_u_Long256_2, __pyx_mstate_global->__pyx_n_u_OidcDeviceAuth, __pyx_mstate_global->__pyx_n_u_PooledReader, __pyx_mstate_global->__pyx_n_u_PooledSender, __pyx_mstate_global->__pyx_n_u_Protocol, __pyx_mstate_global->__pyx_n_u_QueryResult, __pyx_mstate_global->__pyx_n_u_QuestDB, __pyx_mstate_global->__pyx_n_u_QuestDBError, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode, __pyx_mstate_global->__pyx_n_u_QuestDBServerRejectionError, __pyx_mstate_global->__pyx_n_u_QwpWsProgress, __pyx_mstate_global->__pyx_n_u_Sender, __pyx_mstate_global->__pyx_n_u_SenderError, __pyx_mstate_global->__pyx_n_u_SenderErrorCategory, __pyx_mstate_global->__pyx_n_u_SenderErrorPolicy, __pyx_mstate_global->__pyx_n_u_SenderTransaction, __pyx_mstate_global->__pyx_n_u_ServerInfo, __pyx_mstate_global->__pyx_n_u_ServerRole, __pyx_mstate_global->__pyx_n_u_ServerTimestamp, __pyx_mstate_global->__pyx_n_u_ServerTimestampType, __pyx_mstate_global->__pyx_n_u_TimestampMicros_2, __pyx_mstate_global->__pyx_n_u_TimestampNanos_2, __pyx_mstate_global->__pyx_n_u_TlsCa, __pyx_mstate_global->__pyx_n_u_UnsupportedDataFrameShapeError, __pyx_mstate_global->__pyx_n_u_WARN_HIGH_RECONNECTS); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 50, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_all, __pyx_t_4) < (0)) __PYX_ERR(0, 50, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 00051:     'Char',
 00052:     'ConnectionEvent',
 00053:     'ConnectionEventKind',
 00054:     'DateMillis',
 00055:     'ExecDone',
 00056:     'Geohash',
 00057:     'Long256',
 00058:     'OidcDeviceAuth',
 00059:     'PooledReader',
 00060:     'PooledSender',
 00061:     'Protocol',
 00062:     'QueryResult',
 00063:     'QuestDB',
 00064:     'QuestDBError',
 00065:     'QuestDBErrorCode',
 00066:     'QuestDBServerRejectionError',
 00067:     'QwpWsProgress',
 00068:     'Sender',
 00069:     'SenderError',
 00070:     'SenderErrorCategory',
 00071:     'SenderErrorPolicy',
 00072:     'SenderTransaction',
 00073:     'ServerInfo',
 00074:     'ServerRole',
 00075:     'ServerTimestamp',
 00076:     'ServerTimestampType',
 00077:     'TimestampMicros',
 00078:     'TimestampNanos',
 00079:     'TlsCa',
 00080:     'UnsupportedDataFrameShapeError',
 00081:     'WARN_HIGH_RECONNECTS',
 00082: ]
 00083: 
 00084: # For prototypes: https://github.com/cython/cython/tree/master/Cython/Includes
 00085: from libc.stdint cimport uint8_t, uint16_t, uint64_t, int64_t, int32_t, uint32_t, \
 00086:     uintptr_t, INT64_MAX, INT64_MIN
 00087: from libc.stdlib cimport malloc, calloc, realloc, free, qsort
 00088: from libc.string cimport strncmp, memset, memcpy, memcmp, strlen
 00089: from libc.math cimport isnan, floor
 00090: from cpython.datetime cimport datetime as cp_datetime
 00091: from cpython.datetime cimport timedelta as cp_timedelta
 00092: from cpython.datetime cimport import_datetime, datetime_new
 00093: from cpython.datetime cimport (
 00094:     PyDateTime_GET_YEAR, PyDateTime_GET_MONTH, PyDateTime_GET_DAY,
 00095:     PyDateTime_DATE_GET_HOUR, PyDateTime_DATE_GET_MINUTE,
 00096:     PyDateTime_DATE_GET_SECOND, PyDateTime_DATE_GET_MICROSECOND,
 00097: )
 00098: from cpython.bool cimport bool
 00099: from cpython.ref cimport Py_XDECREF
 00100: from cpython.exc cimport PyErr_CheckSignals, PyErr_SetObject
 00101: from cpython.weakref cimport PyWeakref_NewRef, PyWeakref_GetRef
 00102: from cpython.object cimport (PyObject, PyTypeObject, PyObject_TypeCheck,
 00103:                              PyObject_GenericGetAttr, PyObject_GenericSetAttr)
 00104: from cpython.buffer cimport Py_buffer, PyObject_CheckBuffer, \
 00105:     PyObject_GetBuffer, PyBuffer_Release, PyBUF_SIMPLE
 00106: from cpython.pycapsule cimport (PyCapsule_Destructor,
 00107:                                 PyCapsule_GetPointer, PyCapsule_IsValid,
 00108:                                 PyCapsule_New)
 00109: from cpython.pythread cimport (PyThread_tss_create, PyThread_tss_get,
 00110:                                PyThread_tss_set, PyThread_get_thread_ident)
 00111: from cpython.pystate cimport PyThreadState_GetDict
 00112: from cpython.ref cimport Py_INCREF, Py_DECREF
 00113: from cpython.exc cimport PyErr_Fetch, PyErr_Restore
 00114: 
 00115: from .line_sender cimport *
 00116: from .rpyutils cimport *
 00117: from .conf_str cimport *
 00118: from .arrow_c_data_interface cimport *
 00119: from .extra_cpython cimport *
 00120: from ._client_helper cimport *
 00121: 
 00122: # An int we use only for error reporting.
 00123: #  0 is success.
 00124: # -1 is failure.
 00125: ctypedef int void_int
 00126: 
 00127: import cython
 00128: 
 00129: # Imported before the includes: `oidc.pxi` builds its registry lock and
 00130: # registers its shutdown hook at module scope, and an `include` is a text
 00131: # splice, so anything it evaluates at import time must already be bound here.
+00132: import threading
  __pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_threading, 0, 0, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 132, __pyx_L1_error)
  __pyx_t_4 = __pyx_t_1;
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_threading, __pyx_t_4) < (0)) __PYX_ERR(0, 132, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+00133: import atexit
  __pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_atexit, 0, 0, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 133, __pyx_L1_error)
  __pyx_t_4 = __pyx_t_1;
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_atexit, __pyx_t_4) < (0)) __PYX_ERR(0, 133, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 00134: # Import logging before oidc.pxi registers its atexit hook. atexit is LIFO:
 00135: # this makes the callback-detach drain run before logging.shutdown(), so a
 00136: # final token-store diagnostic cannot enter an already-closed FileHandler.
+00137: import logging
  __pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_logging, 0, 0, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 137, __pyx_L1_error)
  __pyx_t_4 = __pyx_t_1;
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_logging, __pyx_t_4) < (0)) __PYX_ERR(0, 137, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 00138: # Imported before the includes because `dataframe.pxi` binds two of its
 00139: # classes at module-init time.
+00140: import ipaddress
  __pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_ipaddress, 0, 0, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 140, __pyx_L1_error)
  __pyx_t_4 = __pyx_t_1;
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ipaddress, __pyx_t_4) < (0)) __PYX_ERR(0, 140, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 00141: 
 00142: include "dataframe.pxi"
 00143: include "oidc.pxi"
 00144: include "egress.pxi"
 00145: 
+00146: from enum import Enum
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_Enum};
    __pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_enum, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 146, __pyx_L1_error)
  }
  __pyx_t_18 = __pyx_t_3;
  __Pyx_GOTREF(__pyx_t_18);
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_Enum};
    __pyx_t_9 = 0; {
      __pyx_t_19 = __Pyx_ImportFrom(__pyx_t_18, __pyx_imported_names[__pyx_t_9]); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 146, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_19);
      if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_9], __pyx_t_19) < (0)) __PYX_ERR(0, 146, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00147: from typing import (
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_List,__pyx_mstate_global->__pyx_n_u_Dict,__pyx_mstate_global->__pyx_n_u_Union,__pyx_mstate_global->__pyx_n_u_Any,__pyx_mstate_global->__pyx_n_u_Optional,__pyx_mstate_global->__pyx_n_u_SupportsIndex,__pyx_mstate_global->__pyx_n_u_Tuple};
    __pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_typing, __pyx_imported_names, 7, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 147, __pyx_L1_error)
  }
  __pyx_t_18 = __pyx_t_3;
  __Pyx_GOTREF(__pyx_t_18);
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_List,__pyx_mstate_global->__pyx_n_u_Dict,__pyx_mstate_global->__pyx_n_u_Union,__pyx_mstate_global->__pyx_n_u_Any,__pyx_mstate_global->__pyx_n_u_Optional,__pyx_mstate_global->__pyx_n_u_SupportsIndex,__pyx_mstate_global->__pyx_n_u_Tuple};
    for (__pyx_t_9=0; __pyx_t_9 < 7; __pyx_t_9++) {
      __pyx_t_19 = __Pyx_ImportFrom(__pyx_t_18, __pyx_imported_names[__pyx_t_9]); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 147, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_19);
      if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_9], __pyx_t_19) < (0)) __PYX_ERR(0, 147, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 00148:     List, Dict, Union, Any, Optional, SupportsIndex, Tuple)
+00149: from dataclasses import dataclass
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_dataclass};
    __pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_dataclasses, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 149, __pyx_L1_error)
  }
  __pyx_t_18 = __pyx_t_3;
  __Pyx_GOTREF(__pyx_t_18);
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_dataclass};
    __pyx_t_9 = 0; {
      __pyx_t_19 = __Pyx_ImportFrom(__pyx_t_18, __pyx_imported_names[__pyx_t_9]); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 149, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_19);
      if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_9], __pyx_t_19) < (0)) __PYX_ERR(0, 149, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 00150: from cpython.bytes cimport (PyBytes_FromStringAndSize,
 00151:                             PyBytes_GET_SIZE, PyBytes_AsString, PyBytes_Check)
 00152: from cpython.bytearray cimport (PyByteArray_AsString, PyByteArray_Size,
 00153:                                PyByteArray_Check)
 00154: from cpython.long cimport PyLong_AsLongLongAndOverflow
 00155: from cpython.memoryview cimport PyMemoryView_Check
 00156: 
+00157: import datetime
  __pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_datetime, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 157, __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_datetime, __pyx_t_18) < (0)) __PYX_ERR(0, 157, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00158: import decimal
  __pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_decimal, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 158, __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_decimal, __pyx_t_18) < (0)) __PYX_ERR(0, 158, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00159: import operator
  __pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_operator, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 159, __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_operator, __pyx_t_18) < (0)) __PYX_ERR(0, 159, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00160: import numbers as _numbers
  __pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_numbers_2, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 160, __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_numbers, __pyx_t_18) < (0)) __PYX_ERR(0, 160, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00161: import os
  __pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_os, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 161, __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_os, __pyx_t_18) < (0)) __PYX_ERR(0, 161, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00162: import sys
  __pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_sys, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 162, __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_sys, __pyx_t_18) < (0)) __PYX_ERR(0, 162, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00163: import time
  __pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_time, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 163, __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_time, __pyx_t_18) < (0)) __PYX_ERR(0, 163, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00164: import uuid
  __pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_uuid, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 164, __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_uuid, __pyx_t_18) < (0)) __PYX_ERR(0, 164, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00165: import warnings
  __pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_warnings, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 165, __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_warnings, __pyx_t_18) < (0)) __PYX_ERR(0, 165, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 00166: 
+00167: import numpy
  __pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_numpy, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 167, __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_numpy, __pyx_t_18) < (0)) __PYX_ERR(0, 167, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 00168: cimport numpy as cnp
 00169: from numpy cimport NPY_DOUBLE, PyArrayObject
 00170: 
 00171: # Functions we need to import as `PyObject` to avoid Cython's `object` type
 00172: from .extra_numpy cimport *
 00173: 
+00174: cnp.import_array()
  __pyx_t_12 = __pyx_f_5numpy_import_array(); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 174, __pyx_L1_error)
+00175: import_datetime()
  __pyx_f_7cpython_8datetime_import_datetime();
 00176: 
+00177: cdef bint _dataframe_columnar_count_io_stats = False
  __pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats = 0;
+00178: cdef uint64_t _dataframe_columnar_flush_calls = 0
  __pyx_v_7questdb_7_client__dataframe_columnar_flush_calls = 0;
+00179: cdef uint64_t _dataframe_columnar_flush_ns = 0
  __pyx_v_7questdb_7_client__dataframe_columnar_flush_ns = 0;
+00180: cdef uint64_t _dataframe_columnar_sync_calls = 0
  __pyx_v_7questdb_7_client__dataframe_columnar_sync_calls = 0;
+00181: cdef uint64_t _dataframe_columnar_sync_ns = 0
  __pyx_v_7questdb_7_client__dataframe_columnar_sync_ns = 0;
+00182: cdef uint64_t _dataframe_columnar_flush_retry_syncs = 0
  __pyx_v_7questdb_7_client__dataframe_columnar_flush_retry_syncs = 0;
 00183: 
+00184: cdef size_t _QWP_MAX_DEFERRED_ARROW_FRAMES = 100
  __pyx_v_7questdb_7_client__QWP_MAX_DEFERRED_ARROW_FRAMES = 0x64;
 00185: 
 00186: # Default rows per columnar batch. Only a pipelining-granularity default: the
 00187: # column sender splits any frame exceeding the negotiated batch cap regardless
 00188: # of this size. Mirrors the Rust core's `DEFAULT_MAX_CHUNK_ROWS`; both sides
 00189: # pin the value in tests so it cannot drift. Keep them in sync when changing it.
+00190: DEFAULT_MAX_CHUNK_ROWS = 16384
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_DEFAULT_MAX_CHUNK_ROWS, __pyx_mstate_global->__pyx_int_16384) < (0)) __PYX_ERR(0, 190, __pyx_L1_error)
 00191: 
 00192: 
 00193: # This value is automatically updated by the `bump2version` tool.
 00194: # If you need to update it, also update the search definition in
 00195: # .bumpversion.cfg.
+00196: VERSION = '6.1.0'
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_VERSION, __pyx_mstate_global->__pyx_kp_u_6_1_0) < (0)) __PYX_ERR(0, 196, __pyx_L1_error)
 00197: 
+00198: WARN_HIGH_RECONNECTS = True
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_WARN_HIGH_RECONNECTS, Py_True) < (0)) __PYX_ERR(0, 198, __pyx_L1_error)
 00199: 
 00200: 
+00201: cdef bint _has_gil(PyThreadState** gs) noexcept:
static int __pyx_f_7questdb_7_client__has_gil(PyThreadState **__pyx_v_gs) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+00202:     return gs[0] == NULL
  __pyx_r = ((__pyx_v_gs[0]) == NULL);
  goto __pyx_L0;
 00203: 
 00204: 
+00205: cdef bint _ensure_doesnt_have_gil(PyThreadState** gs) noexcept:
static int __pyx_f_7questdb_7_client__ensure_doesnt_have_gil(PyThreadState **__pyx_v_gs) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 00206:     """Returns True if previously had the GIL, False otherwise."""
+00207:     if _has_gil(gs):
  __pyx_t_1 = __pyx_f_7questdb_7_client__has_gil(__pyx_v_gs);
  if (__pyx_t_1) {
/* … */
  }
+00208:         gs[0] = PyEval_SaveThread()
    (__pyx_v_gs[0]) = PyEval_SaveThread();
+00209:         return True
    __pyx_r = 1;
    goto __pyx_L0;
+00210:     return False
  __pyx_r = 0;
  goto __pyx_L0;
 00211: 
 00212: 
+00213: cdef void _ensure_has_gil(PyThreadState** gs) noexcept:
static void __pyx_f_7questdb_7_client__ensure_has_gil(PyThreadState **__pyx_v_gs) {
/* … */
  /* function exit code */
}
+00214:     if not _has_gil(gs):
  __pyx_t_1 = (!__pyx_f_7questdb_7_client__has_gil(__pyx_v_gs));
  if (__pyx_t_1) {
/* … */
  }
+00215:         PyEval_RestoreThread(gs[0])
    PyEval_RestoreThread((__pyx_v_gs[0]));
+00216:         gs[0] = NULL
    (__pyx_v_gs[0]) = NULL;
 00217: 
 00218: 
+00219: class QuestDBErrorCode(Enum):
  __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_Enum); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 219, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_19 = PyTuple_Pack(1, __pyx_t_18); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 219, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __pyx_t_18 = __Pyx_PEP560_update_bases(__pyx_t_19); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 219, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_4 = __Pyx_CalculateMetaclass(NULL, __pyx_t_18); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 219, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_20 = __Pyx_Py3MetaclassPrepare(__pyx_t_4, __pyx_t_18, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_Category_of_Error); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 219, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  if (__pyx_t_18 != __pyx_t_19) {
    if (unlikely((PyDict_SetItemString(__pyx_t_20, "__orig_bases__", __pyx_t_19) < 0))) __PYX_ERR(0, 219, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
/* … */
  __pyx_t_16 = __Pyx_Py3ClassCreate(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode, __pyx_t_18, __pyx_t_20, NULL, 0, 0); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 219, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_16);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode, __pyx_t_16) < (0)) __PYX_ERR(0, 219, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 00220:     """Category of Error."""
+00221:     CouldNotResolveAddr = line_sender_error_could_not_resolve_addr
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_could_not_resolve_addr); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 221, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_CouldNotResolveAddr, __pyx_t_19) < (0)) __PYX_ERR(0, 221, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00222:     InvalidApiCall = line_sender_error_invalid_api_call
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_invalid_api_call); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 222, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_InvalidApiCall, __pyx_t_19) < (0)) __PYX_ERR(0, 222, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00223:     SocketError = line_sender_error_socket_error
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_socket_error); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 223, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_SocketError, __pyx_t_19) < (0)) __PYX_ERR(0, 223, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00224:     InvalidUtf8 = line_sender_error_invalid_utf8
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_invalid_utf8); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 224, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_InvalidUtf8, __pyx_t_19) < (0)) __PYX_ERR(0, 224, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00225:     InvalidName = line_sender_error_invalid_name
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_invalid_name); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 225, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_InvalidName, __pyx_t_19) < (0)) __PYX_ERR(0, 225, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00226:     InvalidTimestamp = line_sender_error_invalid_timestamp
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_invalid_timestamp); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 226, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp, __pyx_t_19) < (0)) __PYX_ERR(0, 226, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00227:     AuthError = line_sender_error_auth_error
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_auth_error); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 227, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_AuthError, __pyx_t_19) < (0)) __PYX_ERR(0, 227, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00228:     TlsError = line_sender_error_tls_error
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_tls_error); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 228, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_TlsError, __pyx_t_19) < (0)) __PYX_ERR(0, 228, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00229:     HttpNotSupported = line_sender_error_http_not_supported
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_http_not_supported); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 229, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_HttpNotSupported, __pyx_t_19) < (0)) __PYX_ERR(0, 229, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00230:     ServerFlushError = line_sender_error_server_flush_error
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_server_flush_error); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 230, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ServerFlushError, __pyx_t_19) < (0)) __PYX_ERR(0, 230, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00231:     ServerRejection = line_sender_error_server_rejection
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_server_rejection); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 231, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ServerRejection, __pyx_t_19) < (0)) __PYX_ERR(0, 231, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00232:     RoleMismatch = line_sender_error_role_mismatch
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_role_mismatch); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 232, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_RoleMismatch, __pyx_t_19) < (0)) __PYX_ERR(0, 232, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00233:     ConfigError = line_sender_error_config_error
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_config_error); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 233, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ConfigError, __pyx_t_19) < (0)) __PYX_ERR(0, 233, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00234:     ArrayError = line_sender_error_array_error
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_array_error); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 234, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ArrayError, __pyx_t_19) < (0)) __PYX_ERR(0, 234, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00235:     ProtocolVersionError = line_sender_error_protocol_version_error
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_protocol_version_error); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 235, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ProtocolVersionError, __pyx_t_19) < (0)) __PYX_ERR(0, 235, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00236:     DecimalError = line_sender_error_invalid_decimal
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_invalid_decimal); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 236, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_DecimalError, __pyx_t_19) < (0)) __PYX_ERR(0, 236, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00237:     ArrowUnsupportedColumnKind = line_sender_error_arrow_unsupported_column_kind
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_arrow_unsupported_column_kind); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 237, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ArrowUnsupportedColumnKind, __pyx_t_19) < (0)) __PYX_ERR(0, 237, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00238:     ArrowIngest = line_sender_error_arrow_ingest
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_arrow_ingest); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 238, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ArrowIngest, __pyx_t_19) < (0)) __PYX_ERR(0, 238, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00239:     FailoverRetry = line_sender_error_failover_retry
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_failover_retry); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 239, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_FailoverRetry, __pyx_t_19) < (0)) __PYX_ERR(0, 239, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00240:     ConnectTimeout = line_sender_error_connect_timeout
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_connect_timeout); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 240, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ConnectTimeout, __pyx_t_19) < (0)) __PYX_ERR(0, 240, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 00241:     # Query / reader (egress) categories. The error model is unified across
 00242:     # ingest and query, so these are real FFI codes (no longer bucketed).
+00243:     HandshakeError = line_sender_error_handshake_error
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_handshake_error); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 243, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_HandshakeError, __pyx_t_19) < (0)) __PYX_ERR(0, 243, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00244:     UnsupportedServer = line_sender_error_unsupported_server
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_unsupported_server); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 244, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_UnsupportedServer, __pyx_t_19) < (0)) __PYX_ERR(0, 244, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00245:     ProtocolError = line_sender_error_protocol_error
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_protocol_error); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 245, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ProtocolError, __pyx_t_19) < (0)) __PYX_ERR(0, 245, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00246:     InvalidBind = line_sender_error_invalid_bind
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_invalid_bind); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 246, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_InvalidBind, __pyx_t_19) < (0)) __PYX_ERR(0, 246, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00247:     ServerSchemaMismatch = line_sender_error_server_schema_mismatch
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_server_schema_mismatch); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 247, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ServerSchemaMismatch, __pyx_t_19) < (0)) __PYX_ERR(0, 247, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00248:     ServerParseError = line_sender_error_server_parse_error
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_server_parse_error); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 248, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ServerParseError, __pyx_t_19) < (0)) __PYX_ERR(0, 248, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00249:     ServerInternalError = line_sender_error_server_internal_error
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_server_internal_error); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 249, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ServerInternalError, __pyx_t_19) < (0)) __PYX_ERR(0, 249, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00250:     ServerSecurityError = line_sender_error_server_security_error
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_server_security_error); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 250, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ServerSecurityError, __pyx_t_19) < (0)) __PYX_ERR(0, 250, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00251:     LimitExceeded = line_sender_error_limit_exceeded
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_limit_exceeded); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 251, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_LimitExceeded, __pyx_t_19) < (0)) __PYX_ERR(0, 251, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00252:     ServerLimitExceeded = line_sender_error_server_limit_exceeded
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_server_limit_exceeded); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 252, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ServerLimitExceeded, __pyx_t_19) < (0)) __PYX_ERR(0, 252, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00253:     Cancelled = line_sender_error_cancelled
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_cancelled); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_Cancelled, __pyx_t_19) < (0)) __PYX_ERR(0, 253, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00254:     FailoverWouldDuplicate = line_sender_error_failover_would_duplicate
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_failover_would_duplicate); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 254, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_FailoverWouldDuplicate, __pyx_t_19) < (0)) __PYX_ERR(0, 254, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00255:     SchemaDrift = line_sender_error_schema_drift
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_schema_drift); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 255, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_SchemaDrift, __pyx_t_19) < (0)) __PYX_ERR(0, 255, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00256:     NoSchema = line_sender_error_no_schema
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_no_schema); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_NoSchema, __pyx_t_19) < (0)) __PYX_ERR(0, 256, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00257:     ArrowExport = line_sender_error_arrow_export
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_arrow_export); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 257, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ArrowExport, __pyx_t_19) < (0)) __PYX_ERR(0, 257, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00258:     BatchTooLarge = line_sender_error_batch_too_large
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_batch_too_large); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 258, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_BatchTooLarge, __pyx_t_19) < (0)) __PYX_ERR(0, 258, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00259:     StoreResendRequired = line_sender_error_store_resend_required
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_store_resend_required); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 259, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_StoreResendRequired, __pyx_t_19) < (0)) __PYX_ERR(0, 259, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00260:     SymbolDictFull = line_sender_error_symbol_dict_full
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_symbol_dict_full); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 260, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_SymbolDictFull, __pyx_t_19) < (0)) __PYX_ERR(0, 260, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+00261:     QueryTimeout = line_sender_error_query_timeout
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_error_code(line_sender_error_query_timeout); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 261, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_QueryTimeout, __pyx_t_19) < (0)) __PYX_ERR(0, 261, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 00262:     # Python-only sentinel with no backing FFI code: raised by the Cython
 00263:     # DataFrame-shape validation path. Sits in a reserved high band, disjoint
 00264:     # from the contiguous FFI code space, so an appended FFI variant can never
 00265:     # collide with it. Compared by identity; never sent over FFI.
+00266:     BadDataFrame = 0x10000
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_BadDataFrame, __pyx_mstate_global->__pyx_int_65536) < (0)) __PYX_ERR(0, 266, __pyx_L1_error)
 00267: 
+00268:     def __str__(self) -> str:
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_16QuestDBErrorCode_1__str__(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_16QuestDBErrorCode___str__, "Return the name of the enum.");
static PyMethodDef __pyx_mdef_7questdb_7_client_16QuestDBErrorCode_1__str__ = {"__str__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_16QuestDBErrorCode_1__str__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_16QuestDBErrorCode___str__};
static PyObject *__pyx_pw_7questdb_7_client_16QuestDBErrorCode_1__str__(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("__str__ (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(0, 268, __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(0, 268, __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, "__str__", 0) < (0)) __PYX_ERR(0, 268, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__str__", 1, 1, 1, i); __PYX_ERR(0, 268, __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(0, 268, __pyx_L3_error)
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__str__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 268, __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.QuestDBErrorCode.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_16QuestDBErrorCode___str__(__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_16QuestDBErrorCode___str__(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_AddTraceback("questdb._client.QuestDBErrorCode.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_19 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_str_2) < (0)) __PYX_ERR(0, 268, __pyx_L1_error)
  __pyx_t_16 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_16QuestDBErrorCode_1__str__, 0, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode___str, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[116])); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_16);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_16, __pyx_t_19);
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_str, __pyx_t_16) < (0)) __PYX_ERR(0, 268, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 00269:         """Return the name of the enum."""
+00270:         return self.name
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(0, 270, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 00271: 
 00272: 
+00273: class QuestDBError(Exception):
  __pyx_t_18 = PyTuple_Pack(1, ((PyObject *)(((PyTypeObject*)PyExc_Exception)))); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_4 = __Pyx_PEP560_update_bases(__pyx_t_18); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_20 = __Pyx_CalculateMetaclass(NULL, __pyx_t_4); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __pyx_t_16 = __Pyx_Py3MetaclassPrepare(__pyx_t_20, __pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError, __pyx_mstate_global->__pyx_n_u_QuestDBError, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_An_error_whilst_using_the_QuestD); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  if (__pyx_t_4 != __pyx_t_18) {
    if (unlikely((PyDict_SetItemString(__pyx_t_16, "__orig_bases__", __pyx_t_18) < 0))) __PYX_ERR(0, 273, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __pyx_t_18 = PyList_New(0); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
/* … */
  __pyx_t_17 = __Pyx_Py3ClassCreate(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_QuestDBError, __pyx_t_4, __pyx_t_16, NULL, 0, 0); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  if (__Pyx_CyFunction_InitClassCell(__pyx_t_18, __pyx_t_17) < (0)) __PYX_ERR(0, 273, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_QuestDBError, __pyx_t_17) < (0)) __PYX_ERR(0, 273, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 00274:     """An error whilst using the QuestDB client."""
+00275:     def __init__(self, code, msg, sender_error=None, *, in_doubt=False):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12QuestDBError_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_12QuestDBError_1__init__ = {"__init__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12QuestDBError_1__init__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_12QuestDBError_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;
  PyObject *__pyx_v_code = 0;
  PyObject *__pyx_v_msg = 0;
  PyObject *__pyx_v_sender_error = 0;
  PyObject *__pyx_v_in_doubt = 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_code,&__pyx_mstate_global->__pyx_n_u_msg,&__pyx_mstate_global->__pyx_n_u_sender_error,&__pyx_mstate_global->__pyx_n_u_in_doubt,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(0, 275, __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(0, 275, __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(0, 275, __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(0, 275, __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(0, 275, __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(0, 275, __pyx_L3_error)
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)((PyObject*)Py_False)));
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 4, i); __PYX_ERR(0, 275, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 275, __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(0, 275, __pyx_L3_error)
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 275, __pyx_L3_error)
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 275, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)((PyObject*)Py_False)));
    }
    __pyx_v_self = values[0];
    __pyx_v_code = values[1];
    __pyx_v_msg = values[2];
    __pyx_v_sender_error = values[3];
    __pyx_v_in_doubt = values[4];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 4, __pyx_nargs); __PYX_ERR(0, 275, __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.QuestDBError.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_12QuestDBError___init__(__pyx_self, __pyx_v_self, __pyx_v_code, __pyx_v_msg, __pyx_v_sender_error, __pyx_v_in_doubt);

  /* 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_12QuestDBError___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_code, PyObject *__pyx_v_msg, PyObject *__pyx_v_sender_error, PyObject *__pyx_v_in_doubt) {
  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.QuestDBError.__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_PyDict_NewPresized(1); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 275, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_in_doubt, ((PyObject*)Py_False)) < (0)) __PYX_ERR(0, 275, __pyx_L1_error)
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12QuestDBError_1__init__, 0, __pyx_mstate_global->__pyx_n_u_QuestDBError___init, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[117])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 275, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  PyList_Append(__pyx_t_18, __pyx_t_17);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_17, __pyx_mstate_global->__pyx_tuple[24]);
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_17, __pyx_t_19);
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_init, __pyx_t_17) < (0)) __PYX_ERR(0, 275, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+00276:         super().__init__(msg)
  __pyx_t_4 = NULL;
  __pyx_t_5 = __Pyx_CyFunction_GetClassObj(__pyx_self);
  if (!__pyx_t_5) { PyErr_SetString(PyExc_RuntimeError, "super(): empty __class__ cell"); __PYX_ERR(0, 276, __pyx_L1_error) }
  __Pyx_INCREF(__pyx_t_5);
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_5, __pyx_v_self};
    __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_super, __pyx_callargs+__pyx_t_6, (3-__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(0, 276, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_t_2 = __pyx_t_3;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_6 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_msg};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_init, __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_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 276, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+00277:         self._code = code
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_code_3, __pyx_v_code) < (0)) __PYX_ERR(0, 277, __pyx_L1_error)
+00278:         self._sender_error = sender_error
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_sender_error_2, __pyx_v_sender_error) < (0)) __PYX_ERR(0, 278, __pyx_L1_error)
+00279:         self._in_doubt = bool(in_doubt)
  __pyx_t_3 = NULL;
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_in_doubt};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __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_1)) __PYX_ERR(0, 279, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_1);
  }
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_in_doubt_2, ((PyObject *)__pyx_t_1)) < (0)) __PYX_ERR(0, 279, __pyx_L1_error)
  __Pyx_DECREF((PyObject *)__pyx_t_1); __pyx_t_1 = 0;
 00280: 
+00281:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12QuestDBError_3code(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_12QuestDBError_2code, "Return the error code.");
static PyMethodDef __pyx_mdef_7questdb_7_client_12QuestDBError_3code = {"code", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12QuestDBError_3code, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12QuestDBError_2code};
static PyObject *__pyx_pw_7questdb_7_client_12QuestDBError_3code(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("code (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(0, 281, __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(0, 281, __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, "code", 0) < (0)) __PYX_ERR(0, 281, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("code", 1, 1, 1, i); __PYX_ERR(0, 281, __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(0, 281, __pyx_L3_error)
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("code", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 281, __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.QuestDBError.code", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_12QuestDBError_2code(__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_12QuestDBError_2code(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_AddTraceback("questdb._client.QuestDBError.code", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_19 = NULL;
  __pyx_t_21 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 281, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_21);
  if (PyDict_SetItem(__pyx_t_21, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode) < (0)) __PYX_ERR(0, 281, __pyx_L1_error)
  __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12QuestDBError_3code, 0, __pyx_mstate_global->__pyx_n_u_QuestDBError_code, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[118])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 281, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_25, __pyx_t_21);
  __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_19, __pyx_t_25};
    __pyx_t_17 = __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_19); __pyx_t_19 = 0;
    __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
    if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 281, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
  }
  if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_code, __pyx_t_17) < (0)) __PYX_ERR(0, 281, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 00282:     def code(self) -> QuestDBErrorCode:
 00283:         """Return the error code."""
+00284:         return self._code
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_code_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 284, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 00285: 
+00286:     @property
/* Python wrapper */
static PyLongObject *__pyx_pw_7questdb_7_client_12QuestDBError_5in_doubt(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_12QuestDBError_4in_doubt, "\n        Whether the failed ingestion operation may already have delivered\n        its input. For QWP ``dataframe()``, this covers the entire DataFrame,\n        including earlier batches from the same call, even when a later batch\n        fails local validation. For a sender flush, it describes that flush;\n        it does not summarize earlier independent calls on the sender.\n\n        Retrying that input when this is true requires an appropriate\n        application- or table-level deduplication guarantee. A false value says\n        only that duplicate delivery is not known to be possible; a consumed\n        one-shot input may still be impossible to replay.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_12QuestDBError_5in_doubt = {"in_doubt", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12QuestDBError_5in_doubt, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12QuestDBError_4in_doubt};
static PyLongObject *__pyx_pw_7questdb_7_client_12QuestDBError_5in_doubt(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;
  PyLongObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("in_doubt (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(0, 286, __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(0, 286, __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, "in_doubt", 0) < (0)) __PYX_ERR(0, 286, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("in_doubt", 1, 1, 1, i); __PYX_ERR(0, 286, __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(0, 286, __pyx_L3_error)
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("in_doubt", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 286, __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.QuestDBError.in_doubt", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_12QuestDBError_4in_doubt(__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 PyLongObject *__pyx_pf_7questdb_7_client_12QuestDBError_4in_doubt(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyLongObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client.QuestDBError.in_doubt", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_25 = NULL;
  __pyx_t_19 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(0, 286, __pyx_L1_error)
  __pyx_t_21 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12QuestDBError_5in_doubt, 0, __pyx_mstate_global->__pyx_n_u_QuestDBError_in_doubt, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[119])); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_21);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_21);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_21, __pyx_t_19);
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_25, __pyx_t_21};
    __pyx_t_17 = __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_25); __pyx_t_25 = 0;
    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
    if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 286, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
  }
  if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_in_doubt, __pyx_t_17) < (0)) __PYX_ERR(0, 286, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 00287:     def in_doubt(self) -> bool:
 00288:         """
 00289:         Whether the failed ingestion operation may already have delivered
 00290:         its input. For QWP ``dataframe()``, this covers the entire DataFrame,
 00291:         including earlier batches from the same call, even when a later batch
 00292:         fails local validation. For a sender flush, it describes that flush;
 00293:         it does not summarize earlier independent calls on the sender.
 00294: 
 00295:         Retrying that input when this is true requires an appropriate
 00296:         application- or table-level deduplication guarantee. A false value says
 00297:         only that duplicate delivery is not known to be possible; a consumed
 00298:         one-shot input may still be impossible to replay.
 00299:         """
+00300:         return self._in_doubt
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_in_doubt_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 300, __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_7cpython_4bool_bool))))) __PYX_ERR(0, 300, __pyx_L1_error)
  __pyx_r = ((PyLongObject *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 00301: 
+00302:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12QuestDBError_7sender_error(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_12QuestDBError_6sender_error, "\n        Return the structured QWP/WebSocket diagnostic, if this error carries\n        one from a QWP/WebSocket sender failure.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_12QuestDBError_7sender_error = {"sender_error", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12QuestDBError_7sender_error, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12QuestDBError_6sender_error};
static PyObject *__pyx_pw_7questdb_7_client_12QuestDBError_7sender_error(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("sender_error (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(0, 302, __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(0, 302, __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, "sender_error", 0) < (0)) __PYX_ERR(0, 302, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("sender_error", 1, 1, 1, i); __PYX_ERR(0, 302, __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(0, 302, __pyx_L3_error)
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("sender_error", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 302, __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.QuestDBError.sender_error", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_12QuestDBError_6sender_error(__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_12QuestDBError_6sender_error(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_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb._client.QuestDBError.sender_error", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_21 = NULL;
  __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12QuestDBError_7sender_error, 0, __pyx_mstate_global->__pyx_n_u_QuestDBError_sender_error, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[120])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 302, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25);
  #endif
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_21, __pyx_t_25};
    __pyx_t_17 = __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_21); __pyx_t_21 = 0;
    __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
    if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 302, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
  }
  if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_sender_error, __pyx_t_17) < (0)) __PYX_ERR(0, 302, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 00303:     def sender_error(self):
 00304:         """
 00305:         Return the structured QWP/WebSocket diagnostic, if this error carries
 00306:         one from a QWP/WebSocket sender failure.
 00307:         """
+00308:         if self._sender_error is not None:
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_sender_error_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 308, __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) {
/* … */
  }
+00309:             self._sender_error = _sender_error_from_raw(self._sender_error)
    __pyx_t_3 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_sender_error_from_raw); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 309, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_sender_error_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 309, __pyx_L1_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[2] = {__pyx_t_3, __pyx_t_5};
      __pyx_t_1 = __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_3); __pyx_t_3 = 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(0, 309, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_sender_error_2, __pyx_t_1) < (0)) __PYX_ERR(0, 309, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+00310:         return self._sender_error
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_sender_error_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 310, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 00311: 
 00312: 
+00313: class QuestDBServerRejectionError(QuestDBError):
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 313, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_20 = PyTuple_Pack(1, __pyx_t_4); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 313, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PEP560_update_bases(__pyx_t_20); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 313, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_16 = __Pyx_CalculateMetaclass(NULL, __pyx_t_4); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 313, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __pyx_t_17 = __Pyx_Py3MetaclassPrepare(__pyx_t_16, __pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBServerRejectionError, __pyx_mstate_global->__pyx_n_u_QuestDBServerRejectionError, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_A_terminal_QWP_WebSocket_server); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 313, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (__pyx_t_4 != __pyx_t_20) {
    if (unlikely((PyDict_SetItemString(__pyx_t_17, "__orig_bases__", __pyx_t_20) < 0))) __PYX_ERR(0, 313, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __pyx_t_20 = __Pyx_Py3ClassCreate(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_QuestDBServerRejectionError, __pyx_t_4, __pyx_t_17, NULL, 0, 0); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 313, __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 (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_QuestDBServerRejectionError, __pyx_t_20) < (0)) __PYX_ERR(0, 313, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __Pyx_DECREF(__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;
 00314:     """
 00315:     A terminal QWP/WebSocket server rejection.
 00316: 
 00317:     The structured server payload is available through
 00318:     :attr:`QuestDBError.sender_error`.
 00319:     """
 00320: 
 00321: 
+00322: class UnsupportedDataFrameShapeError(QuestDBError):
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_16 = PyTuple_Pack(1, __pyx_t_4); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PEP560_update_bases(__pyx_t_16); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_17 = __Pyx_CalculateMetaclass(NULL, __pyx_t_4); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_20 = __Pyx_Py3MetaclassPrepare(__pyx_t_17, __pyx_t_4, __pyx_mstate_global->__pyx_n_u_UnsupportedDataFrameShapeError, __pyx_mstate_global->__pyx_n_u_UnsupportedDataFrameShapeError, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_A_DataFrame_shape_is_not_suppor); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  if (__pyx_t_4 != __pyx_t_16) {
    if (unlikely((PyDict_SetItemString(__pyx_t_20, "__orig_bases__", __pyx_t_16) < 0))) __PYX_ERR(0, 322, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __pyx_t_16 = PyList_New(0); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
/* … */
  __pyx_t_18 = __Pyx_Py3ClassCreate(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_UnsupportedDataFrameShapeError, __pyx_t_4, __pyx_t_20, NULL, 0, 0); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 322, __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_CyFunction_InitClassCell(__pyx_t_16, __pyx_t_18) < (0)) __PYX_ERR(0, 322, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_UnsupportedDataFrameShapeError, __pyx_t_18) < (0)) __PYX_ERR(0, 322, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 00323:     """
 00324:     A DataFrame shape is not supported by the optimized columnar client path.
 00325: 
 00326:     ``column_failures`` carries structured per-column rejection details where
 00327:     available; each is a ``dict`` with ``column`` (name or ``None`` for a
 00328:     whole-frame issue), ``target``, ``source_code``, and ``reason``. The same
 00329:     per-column reasons are also folded into ``str(exc)`` so a bare
 00330:     ``print(exc)`` explains *why* the frame was rejected, and — when the
 00331:     designated timestamp is at fault — how to fix it on
 00332:     :meth:`QuestDB.dataframe` (name a valid timestamp column, or pass
 00333:     ``ServerTimestamp``).
 00334:     """
+00335:     def __init__(self, msg, column_failures=None):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_30UnsupportedDataFrameShapeError_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_30UnsupportedDataFrameShapeError_1__init__ = {"__init__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_30UnsupportedDataFrameShapeError_1__init__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_30UnsupportedDataFrameShapeError_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;
  PyObject *__pyx_v_msg = 0;
  PyObject *__pyx_v_column_failures = 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_msg,&__pyx_mstate_global->__pyx_n_u_column_failures,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(0, 335, __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(0, 335, __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(0, 335, __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(0, 335, __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(0, 335, __pyx_L3_error)
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 3, i); __PYX_ERR(0, 335, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 335, __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(0, 335, __pyx_L3_error)
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 335, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_self = values[0];
    __pyx_v_msg = values[1];
    __pyx_v_column_failures = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 335, __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.UnsupportedDataFrameShapeError.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_30UnsupportedDataFrameShapeError___init__(__pyx_self, __pyx_v_self, __pyx_v_msg, __pyx_v_column_failures);

  /* 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_30UnsupportedDataFrameShapeError___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_msg, PyObject *__pyx_v_column_failures) {
  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_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("questdb._client.UnsupportedDataFrameShapeError.__init__", __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_30UnsupportedDataFrameShapeError_1__init__, 0, __pyx_mstate_global->__pyx_n_u_UnsupportedDataFrameShapeError_2, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[121])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 335, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  PyList_Append(__pyx_t_16, __pyx_t_18);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_18, __pyx_mstate_global->__pyx_tuple[24]);
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_init, __pyx_t_18) < (0)) __PYX_ERR(0, 335, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00336:         self.column_failures = tuple(column_failures or ())
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_column_failures); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 336, __pyx_L1_error)
  if (!__pyx_t_2) {
  } else {
    __Pyx_INCREF(__pyx_v_column_failures);
    __pyx_t_1 = __pyx_v_column_failures;
    goto __pyx_L3_bool_binop_done;
  }
  __Pyx_INCREF(__pyx_mstate_global->__pyx_empty_tuple);
  __pyx_t_1 = __pyx_mstate_global->__pyx_empty_tuple;
  __pyx_L3_bool_binop_done:;
  __pyx_t_3 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 336, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_column_failures, __pyx_t_3) < (0)) __PYX_ERR(0, 336, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+00337:         super().__init__(
  __pyx_t_5 = NULL;
  __pyx_t_6 = __Pyx_CyFunction_GetClassObj(__pyx_self);
  if (!__pyx_t_6) { PyErr_SetString(PyExc_RuntimeError, "super(): empty __class__ cell"); __PYX_ERR(0, 337, __pyx_L1_error) }
  __Pyx_INCREF(__pyx_t_6);
  __pyx_t_7 = 1;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_6, __pyx_v_self};
    __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_super, __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;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 337, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_t_1 = __pyx_t_4;
  __Pyx_INCREF(__pyx_t_1);
+00338:             QuestDBErrorCode.BadDataFrame,
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 338, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 338, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+00339:             _format_unsupported_dataframe_msg(msg, self.column_failures))
  __pyx_t_6 = __pyx_v_msg;
  __Pyx_INCREF(__pyx_t_6);
  if (!(likely(PyUnicode_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_6))) __PYX_ERR(0, 339, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_column_failures); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 339, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  if (!(likely(PyTuple_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_8))) __PYX_ERR(0, 339, __pyx_L1_error)
  __pyx_t_9 = __pyx_f_7questdb_7_client__format_unsupported_dataframe_msg(((PyObject*)__pyx_t_6), ((PyObject*)__pyx_t_8)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 339, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_7 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_5, __pyx_t_9};
    __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_init, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (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_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 337, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 00340: 
 00341: 
+00342: cdef str _format_unsupported_dataframe_msg(str msg, tuple column_failures):
static PyObject *__pyx_f_7questdb_7_client__format_unsupported_dataframe_msg(PyObject *__pyx_v_msg, PyObject *__pyx_v_column_failures) {
  PyObject *__pyx_v_lines = 0;
  PyObject *__pyx_v_failure = 0;
  PyObject *__pyx_v_column = 0;
  PyObject *__pyx_v_reason = 0;
  int __pyx_v_ts_related;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("questdb._client._format_unsupported_dataframe_msg", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_lines);
  __Pyx_XDECREF(__pyx_v_failure);
  __Pyx_XDECREF(__pyx_v_column);
  __Pyx_XDECREF(__pyx_v_reason);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00343:     # Surface the per-column reasons (otherwise stranded on the
 00344:     # `.column_failures` attribute) so a plain `str(exc)` says what to fix
 00345:     # instead of a bare "columnar v1". When the designated timestamp is the
 00346:     # problem, point at the two client-side remedies (name a valid column,
 00347:     # or let the server stamp) — keeping the user on QuestDB.dataframe()
 00348:     # rather than steering them off to the row path.
+00349:     if not column_failures:
  if (__pyx_v_column_failures == Py_None) __pyx_t_1 = 0;
  else
  {
    Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_v_column_failures);
    if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 349, __pyx_L1_error)
    __pyx_t_1 = (__pyx_temp != 0);
  }

  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {
/* … */
  }
+00350:         return msg
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_msg);
    __pyx_r = __pyx_v_msg;
    goto __pyx_L0;
+00351:     cdef list lines = [msg]
  __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 351, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_msg);
  __Pyx_GIVEREF(__pyx_v_msg);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_v_msg) != (0)) __PYX_ERR(0, 351, __pyx_L1_error);
  __pyx_v_lines = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
 00352:     cdef object failure, column, reason
+00353:     cdef bint ts_related = False
  __pyx_v_ts_related = 0;
+00354:     for failure in column_failures:
  if (unlikely(__pyx_v_column_failures == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 354, __pyx_L1_error)
  }
  __pyx_t_3 = __pyx_v_column_failures; __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  for (;;) {
    {
      Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3);
      #if !CYTHON_ASSUME_SAFE_SIZE
      if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 354, __pyx_L1_error)
      #endif
      if (__pyx_t_4 >= __pyx_temp) break;
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_5 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4));
    #else
    __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_4);
    #endif
    ++__pyx_t_4;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 354, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_XDECREF_SET(__pyx_v_failure, __pyx_t_5);
    __pyx_t_5 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+00355:         if isinstance(failure, dict):
    __pyx_t_2 = PyDict_Check(__pyx_v_failure); 
    if (__pyx_t_2) {
/* … */
      goto __pyx_L6;
    }
+00356:             column = failure.get('column')
      __pyx_t_6 = __pyx_v_failure;
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_n_u_column_2};
        __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 356, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      __Pyx_XDECREF_SET(__pyx_v_column, __pyx_t_5);
      __pyx_t_5 = 0;
+00357:             reason = failure.get('reason', failure)
      __pyx_t_6 = __pyx_v_failure;
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_mstate_global->__pyx_n_u_reason, __pyx_v_failure};
        __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 357, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      __Pyx_XDECREF_SET(__pyx_v_reason, __pyx_t_5);
      __pyx_t_5 = 0;
+00358:             if (failure.get('target') == 'designated timestamp'
      __pyx_t_6 = __pyx_v_failure;
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_n_u_target};
        __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 358, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_designated_timestamp, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 358, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (!__pyx_t_1) {
      } else {
        __pyx_t_2 = __pyx_t_1;
        goto __pyx_L8_bool_binop_done;
      }
/* … */
      if (__pyx_t_2) {
/* … */
      }
+00359:                     or 'ServerTimestamp' in str(reason)):
      __pyx_t_5 = __Pyx_PyObject_Unicode(__pyx_v_reason); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 359, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_1 = (__Pyx_PyUnicode_ContainsTF(__pyx_mstate_global->__pyx_n_u_ServerTimestamp, __pyx_t_5, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 359, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_2 = __pyx_t_1;
      __pyx_L8_bool_binop_done:;
+00360:                 ts_related = True
        __pyx_v_ts_related = 1;
 00361:         else:
+00362:             column, reason = None, failure
    /*else*/ {
      __pyx_t_5 = Py_None;
      __Pyx_INCREF(__pyx_t_5);
      __pyx_t_6 = __pyx_v_failure;
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_XDECREF_SET(__pyx_v_column, __pyx_t_5);
      __pyx_t_5 = 0;
      __Pyx_XDECREF_SET(__pyx_v_reason, __pyx_t_6);
      __pyx_t_6 = 0;
    }
    __pyx_L6:;
+00363:         if column is not None:
    __pyx_t_2 = (__pyx_v_column != Py_None);
    if (__pyx_t_2) {
/* … */
      goto __pyx_L10;
    }
+00364:             lines.append(f'  - column {column!r}: {reason}')
      __pyx_t_6 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_column), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 364, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_v_reason, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 364, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_column_4;
      __pyx_t_8[1] = __pyx_t_6;
      __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u_;
      __pyx_t_8[3] = __pyx_t_5;
      __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_8, 4, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5));
      if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 364, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_lines, __pyx_t_9); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 364, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 00365:         else:
+00366:             lines.append(f'  - {reason}')
    /*else*/ {
      __pyx_t_9 = __Pyx_PyObject_FormatSimple(__pyx_v_reason, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 366, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u__24, __pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 366, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_lines, __pyx_t_5); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 366, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __pyx_L10:;
+00367:     if ts_related:
  if (__pyx_v_ts_related) {
/* … */
  }
+00368:         lines.append(
    __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_lines, __pyx_mstate_global->__pyx_kp_u_For_the_designated_timestamp_na); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 368, __pyx_L1_error)
 00369:             "  For the designated timestamp, name a valid timestamp column "
 00370:             "with at='<column>', or pass at=ServerTimestamp to have the "
 00371:             "server assign each row's timestamp on arrival.")
+00372:     return '\n'.join(lines)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__25, __pyx_v_lines); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 372, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
  goto __pyx_L0;
 00373: 
 00374: 
+00375: cdef inline object c_err_code_to_py(line_sender_error_code code):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_c_err_code_to_py(enum line_sender_error_code __pyx_v_code) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client.c_err_code_to_py", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+00376:     if code == line_sender_error_could_not_resolve_addr:
  switch (__pyx_v_code) {
    case line_sender_error_could_not_resolve_addr:
/* … */
    break;
    case line_sender_error_invalid_api_call:
+00377:         return QuestDBErrorCode.CouldNotResolveAddr
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 377, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_CouldNotResolveAddr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 377, __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;
+00378:     elif code == line_sender_error_invalid_api_call:
    break;
    case line_sender_error_socket_error:
+00379:         return QuestDBErrorCode.InvalidApiCall
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 379, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 379, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00380:     elif code == line_sender_error_socket_error:
    break;
    case line_sender_error_invalid_utf8:
+00381:         return QuestDBErrorCode.SocketError
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 381, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_SocketError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 381, __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;
+00382:     elif code == line_sender_error_invalid_utf8:
    break;
    case line_sender_error_invalid_name:
+00383:         return QuestDBErrorCode.InvalidUtf8
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 383, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidUtf8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 383, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00384:     elif code == line_sender_error_invalid_name:
    break;
    case line_sender_error_invalid_timestamp:
+00385:         return QuestDBErrorCode.InvalidName
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 385, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_InvalidName); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 385, __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;
+00386:     elif code == line_sender_error_invalid_timestamp:
    break;
    case line_sender_error_auth_error:
+00387:         return QuestDBErrorCode.InvalidTimestamp
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 387, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 387, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00388:     elif code == line_sender_error_auth_error:
    break;
    case line_sender_error_tls_error:
+00389:         return QuestDBErrorCode.AuthError
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 389, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_AuthError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 389, __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;
+00390:     elif code == line_sender_error_tls_error:
    break;
    case line_sender_error_http_not_supported:
+00391:         return QuestDBErrorCode.TlsError
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 391, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_TlsError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 391, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00392:     elif code == line_sender_error_http_not_supported:
    break;
    case line_sender_error_server_flush_error:
+00393:         return QuestDBErrorCode.HttpNotSupported
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 393, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_HttpNotSupported); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 393, __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;
+00394:     elif code == line_sender_error_server_flush_error:
    break;
    case line_sender_error_server_rejection:
+00395:         return QuestDBErrorCode.ServerFlushError
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 395, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 395, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00396:     elif code == line_sender_error_server_rejection:
    break;
    case line_sender_error_role_mismatch:
+00397:         return QuestDBErrorCode.ServerRejection
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 397, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ServerRejection); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 397, __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;
+00398:     elif code == line_sender_error_role_mismatch:
    break;
    case line_sender_error_config_error:
+00399:         return QuestDBErrorCode.RoleMismatch
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 399, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_RoleMismatch); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 399, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00400:     elif code == line_sender_error_config_error:
    break;
    case line_sender_error_array_error:
+00401:         return QuestDBErrorCode.ConfigError
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 401, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 401, __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;
+00402:     elif code == line_sender_error_array_error:
    break;
    case line_sender_error_protocol_version_error:
+00403:         return QuestDBErrorCode.ArrayError
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 403, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ArrayError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 403, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00404:     elif code == line_sender_error_protocol_version_error:
    break;
    case line_sender_error_invalid_decimal:
+00405:         return QuestDBErrorCode.ProtocolVersionError
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 405, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ProtocolVersionError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 405, __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;
+00406:     elif code == line_sender_error_invalid_decimal:
    break;
    case line_sender_error_arrow_unsupported_column_kind:
+00407:         return QuestDBErrorCode.DecimalError
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 407, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_DecimalError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 407, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00408:     elif code == line_sender_error_arrow_unsupported_column_kind:
    break;
    case line_sender_error_arrow_ingest:
+00409:         return QuestDBErrorCode.ArrowUnsupportedColumnKind
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 409, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ArrowUnsupportedColumnKind); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 409, __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;
+00410:     elif code == line_sender_error_arrow_ingest:
    break;
    case line_sender_error_failover_retry:
+00411:         return QuestDBErrorCode.ArrowIngest
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 411, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ArrowIngest); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 411, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00412:     elif code == line_sender_error_failover_retry:
    break;
    case line_sender_error_connect_timeout:
+00413:         return QuestDBErrorCode.FailoverRetry
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 413, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_FailoverRetry); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 413, __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;
+00414:     elif code == line_sender_error_connect_timeout:
    break;
    case line_sender_error_handshake_error:
+00415:         return QuestDBErrorCode.ConnectTimeout
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 415, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ConnectTimeout); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 415, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00416:     elif code == line_sender_error_handshake_error:
    break;
    case line_sender_error_unsupported_server:
+00417:         return QuestDBErrorCode.HandshakeError
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 417, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_HandshakeError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 417, __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;
+00418:     elif code == line_sender_error_unsupported_server:
    break;
    case line_sender_error_protocol_error:
+00419:         return QuestDBErrorCode.UnsupportedServer
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 419, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_UnsupportedServer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 419, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00420:     elif code == line_sender_error_protocol_error:
    break;
    case line_sender_error_invalid_bind:
+00421:         return QuestDBErrorCode.ProtocolError
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 421, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ProtocolError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 421, __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;
+00422:     elif code == line_sender_error_invalid_bind:
    break;
    case line_sender_error_server_schema_mismatch:
+00423:         return QuestDBErrorCode.InvalidBind
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 423, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidBind); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 423, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00424:     elif code == line_sender_error_server_schema_mismatch:
    break;
    case line_sender_error_server_parse_error:
+00425:         return QuestDBErrorCode.ServerSchemaMismatch
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 425, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ServerSchemaMismatch); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 425, __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;
+00426:     elif code == line_sender_error_server_parse_error:
    break;
    case line_sender_error_server_internal_error:
+00427:         return QuestDBErrorCode.ServerParseError
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 427, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ServerParseError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 427, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00428:     elif code == line_sender_error_server_internal_error:
    break;
    case line_sender_error_server_security_error:
+00429:         return QuestDBErrorCode.ServerInternalError
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 429, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ServerInternalError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 429, __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;
+00430:     elif code == line_sender_error_server_security_error:
    break;
    case line_sender_error_limit_exceeded:
+00431:         return QuestDBErrorCode.ServerSecurityError
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 431, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ServerSecurityError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 431, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00432:     elif code == line_sender_error_limit_exceeded:
    break;
    case line_sender_error_server_limit_exceeded:
+00433:         return QuestDBErrorCode.LimitExceeded
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 433, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_LimitExceeded); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 433, __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;
+00434:     elif code == line_sender_error_server_limit_exceeded:
    break;
    case line_sender_error_cancelled:
+00435:         return QuestDBErrorCode.ServerLimitExceeded
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 435, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ServerLimitExceeded); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 435, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00436:     elif code == line_sender_error_cancelled:
    break;
    case line_sender_error_failover_would_duplicate:
+00437:         return QuestDBErrorCode.Cancelled
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 437, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_Cancelled); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 437, __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;
+00438:     elif code == line_sender_error_failover_would_duplicate:
    break;
    case line_sender_error_schema_drift:
+00439:         return QuestDBErrorCode.FailoverWouldDuplicate
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 439, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_FailoverWouldDuplicate); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 439, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00440:     elif code == line_sender_error_schema_drift:
    break;
    case line_sender_error_no_schema:
+00441:         return QuestDBErrorCode.SchemaDrift
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 441, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_SchemaDrift); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 441, __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;
+00442:     elif code == line_sender_error_no_schema:
    break;
    case line_sender_error_arrow_export:
+00443:         return QuestDBErrorCode.NoSchema
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 443, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_NoSchema); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 443, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00444:     elif code == line_sender_error_arrow_export:
    break;
    case line_sender_error_batch_too_large:
+00445:         return QuestDBErrorCode.ArrowExport
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 445, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ArrowExport); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 445, __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;
+00446:     elif code == line_sender_error_batch_too_large:
    break;
    case line_sender_error_store_resend_required:
+00447:         return QuestDBErrorCode.BatchTooLarge
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 447, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_BatchTooLarge); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 447, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00448:     elif code == line_sender_error_store_resend_required:
    break;
    case line_sender_error_symbol_dict_full:
+00449:         return QuestDBErrorCode.StoreResendRequired
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 449, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_StoreResendRequired); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 449, __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;
+00450:     elif code == line_sender_error_symbol_dict_full:
    break;
    case line_sender_error_query_timeout:
+00451:         return QuestDBErrorCode.SymbolDictFull
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 451, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_SymbolDictFull); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 451, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+00452:     elif code == line_sender_error_query_timeout:
    break;
    default:
+00453:         return QuestDBErrorCode.QueryTimeout
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 453, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QueryTimeout); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 453, __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;
 00454:     else:
+00455:         raise ValueError('Internal error converting error code.')
    __pyx_t_1 = NULL;
    __pyx_t_3 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_mstate_global->__pyx_kp_u_Internal_error_converting_error};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 455, __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(0, 455, __pyx_L1_error)
    break;
  }
 00456: 
 00457: 
+00458: def _debug_error_code_to_py(int raw_code):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_83_debug_error_code_to_py(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_82_debug_error_code_to_py, "Internal ABI test hook for the native-to-Python error mapping.");
static PyMethodDef __pyx_mdef_7questdb_7_client_83_debug_error_code_to_py = {"_debug_error_code_to_py", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_83_debug_error_code_to_py, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_82_debug_error_code_to_py};
static PyObject *__pyx_pw_7questdb_7_client_83_debug_error_code_to_py(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
) {
  int __pyx_v_raw_code;
  #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_error_code_to_py (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_raw_code,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(0, 458, __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(0, 458, __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_error_code_to_py", 0) < (0)) __PYX_ERR(0, 458, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_error_code_to_py", 1, 1, 1, i); __PYX_ERR(0, 458, __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(0, 458, __pyx_L3_error)
    }
    __pyx_v_raw_code = __Pyx_PyLong_As_int(values[0]); if (unlikely((__pyx_v_raw_code == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 458, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_debug_error_code_to_py", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 458, __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_error_code_to_py", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_82_debug_error_code_to_py(__pyx_self, __pyx_v_raw_code);
  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_82_debug_error_code_to_py(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_raw_code) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client._debug_error_code_to_py", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_83_debug_error_code_to_py, 0, __pyx_mstate_global->__pyx_n_u_debug_error_code_to_py, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[122])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 458, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_error_code_to_py, __pyx_t_4) < (0)) __PYX_ERR(0, 458, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 00459:     """Internal ABI test hook for the native-to-Python error mapping."""
+00460:     return c_err_code_to_py(<line_sender_error_code>raw_code)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7questdb_7_client_c_err_code_to_py(((enum line_sender_error_code)__pyx_v_raw_code)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 460, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 00461: 
 00462: 
+00463: cdef inline object c_sender_error_view_to_raw(
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_c_sender_error_view_to_raw(struct line_sender_qwpws_error_view __pyx_v_view) {
  PyObject *__pyx_v_message = 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_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("questdb._client.c_sender_error_view_to_raw", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_message);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00464:         line_sender_qwpws_error_view view):
 00465:     cdef object message
+00466:     if view.message == NULL:
  __pyx_t_1 = (__pyx_v_view.message == NULL);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+00467:         message = ''
    __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u__7);
    __pyx_v_message = __pyx_mstate_global->__pyx_kp_u__7;
 00468:     else:
+00469:         message = PyUnicode_FromStringAndSize(
  /*else*/ {
/* … */
    __pyx_t_2 = PyUnicode_FromStringAndSize(__pyx_v_view.message, ((Py_ssize_t)__pyx_v_view.message_len)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 469, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_message = __pyx_t_2;
    __pyx_t_2 = 0;
  }
  __pyx_L3:;
 00470:             view.message, <Py_ssize_t>view.message_len)
+00471:     return (
  __Pyx_XDECREF(__pyx_r);
+00472:         <int>view.category,
  __pyx_t_2 = __Pyx_PyLong_From_int(((int)__pyx_v_view.category)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 472, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
/* … */
  __pyx_t_8 = PyTuple_New(7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 472, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_2);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2) != (0)) __PYX_ERR(0, 472, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_3);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_3) != (0)) __PYX_ERR(0, 472, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_4);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_4) != (0)) __PYX_ERR(0, 472, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_message);
  __Pyx_GIVEREF(__pyx_v_message);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_v_message) != (0)) __PYX_ERR(0, 472, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_5);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 4, __pyx_t_5) != (0)) __PYX_ERR(0, 472, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_6);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 5, __pyx_t_6) != (0)) __PYX_ERR(0, 472, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_7);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 6, __pyx_t_7) != (0)) __PYX_ERR(0, 472, __pyx_L1_error);
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_t_5 = 0;
  __pyx_t_6 = 0;
  __pyx_t_7 = 0;
  __pyx_r = __pyx_t_8;
  __pyx_t_8 = 0;
  goto __pyx_L0;
+00473:         <int>view.applied_policy,
  __pyx_t_3 = __Pyx_PyLong_From_int(((int)__pyx_v_view.applied_policy)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 473, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
+00474:         view.status if view.has_status else None,
  __pyx_t_1 = (__pyx_v_view.has_status != 0);
  if (__pyx_t_1) {
    __pyx_t_5 = __Pyx_PyLong_From_uint8_t(__pyx_v_view.status); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 474, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = __pyx_t_5;
    __pyx_t_5 = 0;
  } else {
    __Pyx_INCREF(Py_None);
    __pyx_t_4 = Py_None;
  }
 00475:         message,
+00476:         view.message_sequence if view.has_message_sequence else None,
  __pyx_t_1 = (__pyx_v_view.has_message_sequence != 0);
  if (__pyx_t_1) {
    __pyx_t_6 = __Pyx_PyLong_From_uint64_t(__pyx_v_view.message_sequence); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 476, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = __pyx_t_6;
    __pyx_t_6 = 0;
  } else {
    __Pyx_INCREF(Py_None);
    __pyx_t_5 = Py_None;
  }
+00477:         view.from_fsn,
  __pyx_t_6 = __Pyx_PyLong_From_uint64_t(__pyx_v_view.from_fsn); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 477, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
+00478:         view.to_fsn)
  __pyx_t_7 = __Pyx_PyLong_From_uint64_t(__pyx_v_view.to_fsn); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 478, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
 00479: 
 00480: 
 00481: # Rotating Bearer-token providers. Included here, after the error classes it
 00482: # subclasses at import time.
 00483: include "token_provider.pxi"
 00484: 
 00485: 
+00486: cdef inline object c_err_to_fields(questdb_error* err):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_c_err_to_fields(questdb_error *__pyx_v_err) {
  questdb_error_code __pyx_v_code;
  size_t __pyx_v_c_len;
  char const *__pyx_v_c_msg;
  struct line_sender_qwpws_error_view __pyx_v_qwp_ws_view;
  int __pyx_v_in_doubt;
  PyObject *__pyx_v_py_msg = 0;
  PyObject *__pyx_v_py_code = 0;
  PyObject *__pyx_v_py_sender_error = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client.c_err_to_fields", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_py_msg);
  __Pyx_XDECREF(__pyx_v_py_code);
  __Pyx_XDECREF(__pyx_v_py_sender_error);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00487:     """Extract ``QuestDBError`` fields from a C error, which will be freed."""
+00488:     if err == NULL:
  __pyx_t_1 = (__pyx_v_err == NULL);
  if (__pyx_t_1) {
/* … */
  }
+00489:         return (
    __Pyx_XDECREF(__pyx_r);
+00490:             QuestDBErrorCode.SocketError,
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 490, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_SocketError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 490, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
    __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 490, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_3);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3) != (0)) __PYX_ERR(0, 490, __pyx_L1_error);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_Unknown_error_the_client_library);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_kp_u_Unknown_error_the_client_library);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_mstate_global->__pyx_kp_u_Unknown_error_the_client_library) != (0)) __PYX_ERR(0, 490, __pyx_L1_error);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 2, Py_None) != (0)) __PYX_ERR(0, 490, __pyx_L1_error);
    __Pyx_INCREF(Py_False);
    __Pyx_GIVEREF(Py_False);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 3, Py_False) != (0)) __PYX_ERR(0, 490, __pyx_L1_error);
    __pyx_t_3 = 0;
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
 00491:             'Unknown error: the client library reported failure without '
 00492:             'a diagnostic.',
 00493:             None,
 00494:             False)
+00495:     cdef questdb_error_code code = questdb_error_get_code(err)
  __pyx_v_code = questdb_error_get_code(__pyx_v_err);
+00496:     cdef size_t c_len = 0
  __pyx_v_c_len = 0;
+00497:     cdef const char* c_msg = questdb_error_msg(err, &c_len)
  __pyx_v_c_msg = questdb_error_msg(__pyx_v_err, (&__pyx_v_c_len));
 00498:     cdef line_sender_qwpws_error_view qwp_ws_view
+00499:     cdef bint in_doubt = questdb_error_in_doubt(err)
  __pyx_v_in_doubt = questdb_error_in_doubt(__pyx_v_err);
 00500:     cdef object py_msg
 00501:     cdef object py_code
+00502:     cdef object py_sender_error = None
  __Pyx_INCREF(Py_None);
  __pyx_v_py_sender_error = Py_None;
+00503:     try:
  /*try:*/ {
+00504:         py_code = c_err_code_to_py(code)
    __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_code_to_py(__pyx_v_code); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 504, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_py_code = __pyx_t_2;
    __pyx_t_2 = 0;
+00505:         py_msg = PyUnicode_FromStringAndSize(c_msg, <Py_ssize_t>c_len)
    __pyx_t_2 = PyUnicode_FromStringAndSize(__pyx_v_c_msg, ((Py_ssize_t)__pyx_v_c_len)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 505, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_py_msg = __pyx_t_2;
    __pyx_t_2 = 0;
+00506:         if line_sender_error_qwpws_get_view(err, &qwp_ws_view):
    __pyx_t_1 = line_sender_error_qwpws_get_view(__pyx_v_err, (&__pyx_v_qwp_ws_view));
    if (__pyx_t_1) {
/* … */
    }
+00507:             py_sender_error = c_sender_error_view_to_raw(qwp_ws_view)
      __pyx_t_2 = __pyx_f_7questdb_7_client_c_sender_error_view_to_raw(__pyx_v_qwp_ws_view); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 507, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF_SET(__pyx_v_py_sender_error, __pyx_t_2);
      __pyx_t_2 = 0;
+00508:         return (py_code, py_msg, py_sender_error, in_doubt)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_in_doubt); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 508, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 508, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_py_code);
    __Pyx_GIVEREF(__pyx_v_py_code);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_py_code) != (0)) __PYX_ERR(0, 508, __pyx_L5_error);
    __Pyx_INCREF(__pyx_v_py_msg);
    __Pyx_GIVEREF(__pyx_v_py_msg);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_py_msg) != (0)) __PYX_ERR(0, 508, __pyx_L5_error);
    __Pyx_INCREF(__pyx_v_py_sender_error);
    __Pyx_GIVEREF(__pyx_v_py_sender_error);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_py_sender_error) != (0)) __PYX_ERR(0, 508, __pyx_L5_error);
    __Pyx_GIVEREF(__pyx_t_2);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_2) != (0)) __PYX_ERR(0, 508, __pyx_L5_error);
    __pyx_t_2 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L4_return;
  }
 00509:     finally:
+00510:         questdb_error_free(err)
  /*finally:*/ {
    __pyx_L5_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
      if ( unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
      {
        questdb_error_free(__pyx_v_err);
/* … */
      questdb_error_free(__pyx_v_err);
+00511:         _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(0, 511, __pyx_L9_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);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
      __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
      __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6;
      goto __pyx_L1_error;
      __pyx_L9_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);
      __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_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L4_return: {
      __pyx_t_12 = __pyx_r;
      __pyx_r = 0;
/* … */
      __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(0, 511, __pyx_L1_error)
      __pyx_r = __pyx_t_12;
      __pyx_t_12 = 0;
      goto __pyx_L0;
    }
  }
 00512: 
 00513: 
+00514: cdef inline object c_err_to_py(line_sender_error* err):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_c_err_to_py(struct line_sender_error *__pyx_v_err) {
  struct questdb_oidc_error_view __pyx_v_oidc_view;
  PyObject *__pyx_v_token_exc = 0;
  PyObject *__pyx_v_tup = 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_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("questdb._client.c_err_to_py", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_token_exc);
  __Pyx_XDECREF(__pyx_v_tup);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00515:     """Build the Python exception for a C error, which will be freed.
 00516: 
 00517:     Returns an ``OidcError`` (from ``questdb.auth``) when the native error has
 00518:     an OIDC failure anywhere in its causal chain -- reachable only on an
 00519:     ``oidc_auth`` transport -- or ``TokenUnavailableError`` for a generic
 00520:     provider failure; otherwise a plain ``QuestDBError`` subclass.
 00521: 
 00522:     Note the native predicate is "caused by", not "is": a transport that
 00523:     re-classifies an error keeps the auth payload attached, so a flush or
 00524:     failover failure whose root cause was a token refresh also lands here, with
 00525:     the transport's own ``code`` and message preserved by
 00526:     ``_oidc_err_to_py``. That is why ``OidcError`` must stay a ``QuestDBError``
 00527:     subclass -- ``except QuestDBError`` keeps catching every such error --
 00528:     while ``except OidcError`` (or a typed subclass) additionally selects the
 00529:     ones an auth failure is behind.
 00530:     """
 00531:     cdef questdb_oidc_error_view oidc_view
 00532:     cdef object token_exc
+00533:     if err != NULL:
  __pyx_t_1 = (__pyx_v_err != NULL);
  if (__pyx_t_1) {
/* … */
  }
+00534:         memset(&oidc_view, 0, sizeof(questdb_oidc_error_view))
    (void)(memset((&__pyx_v_oidc_view), 0, (sizeof(struct questdb_oidc_error_view))));
+00535:         oidc_view.struct_size = sizeof(questdb_oidc_error_view)
    __pyx_v_oidc_view.struct_size = (sizeof(struct questdb_oidc_error_view));
+00536:         if questdb_error_oidc_get_view(err, &oidc_view):
    __pyx_t_1 = questdb_error_oidc_get_view(__pyx_v_err, (&__pyx_v_oidc_view));
    if (__pyx_t_1) {
/* … */
    }
+00537:             return _oidc_err_to_py(err)
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = __pyx_f_7questdb_7_client__oidc_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 537, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_r = __pyx_t_2;
      __pyx_t_2 = 0;
      goto __pyx_L0;
 00538:         # A token provider's classified failure, wherever it surfaced.
+00539:         token_exc = _tp_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7_client__tp_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 539, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_token_exc = __pyx_t_2;
    __pyx_t_2 = 0;
+00540:         if token_exc is not None:
    __pyx_t_1 = (__pyx_v_token_exc != Py_None);
    if (__pyx_t_1) {
/* … */
    }
+00541:             return token_exc
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_token_exc);
      __pyx_r = __pyx_v_token_exc;
      goto __pyx_L0;
+00542:     cdef object tup = c_err_to_fields(err)
  __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_fields(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 542, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_tup = __pyx_t_2;
  __pyx_t_2 = 0;
+00543:     if tup[0] == QuestDBErrorCode.ServerRejection:
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_tup, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 543, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 543, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_ServerRejection); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 543, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 543, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 543, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_1) {
/* … */
  }
+00544:         return QuestDBServerRejectionError(
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_4 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBServerRejectionError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 544, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
+00545:             tup[0], tup[1], tup[2], in_doubt=tup[3])
    __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_tup, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 545, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_tup, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 545, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_tup, 2, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 545, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_tup, 3, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 545, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
      assert(__pyx_t_4);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
      __pyx_t_9 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[4 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_4, __pyx_t_5, __pyx_t_6, __pyx_t_7};
      __pyx_t_10 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 544, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_in_doubt, __pyx_t_8, __pyx_t_10, __pyx_callargs+4, 0) < (0)) __PYX_ERR(0, 544, __pyx_L1_error)
      __pyx_t_3 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_9, (4-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_10);
      __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_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 544, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
+00546:     return QuestDBError(tup[0], tup[1], tup[2], in_doubt=tup[3])
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 546, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_tup, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 546, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_tup, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 546, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_tup, 2, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 546, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_tup, 3, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 546, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_9 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_10))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_10);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_10);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_10, __pyx__function);
    __pyx_t_9 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[4 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_2, __pyx_t_8, __pyx_t_7, __pyx_t_6};
    __pyx_t_4 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 546, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_in_doubt, __pyx_t_5, __pyx_t_4, __pyx_callargs+4, 0) < (0)) __PYX_ERR(0, 546, __pyx_L1_error)
    __pyx_t_3 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_10, __pyx_callargs+__pyx_t_9, (4-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_4);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 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;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 546, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 00547: 
 00548: 
+00549: cdef inline object c_err_to_py_fmt(line_sender_error* err, str fmt):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_c_err_to_py_fmt(struct line_sender_error *__pyx_v_err, PyObject *__pyx_v_fmt) {
  PyObject *__pyx_v_exc = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client.c_err_to_py_fmt", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00550:     """Build the Python exception for a C error, which will be freed.
 00551: 
 00552:     Like ``c_err_to_py`` but formats the message through ``fmt``, preserving
 00553:     generic provider classification and every OIDC subclass.
 00554:     ``questdb_error_oidc_get_view`` reports an OIDC failure
 00555:     anywhere in the error's *causal chain*, not that the error is one: native
 00556:     keeps the auth payload attached when a transport re-classifies an error on
 00557:     its way out, so a failure whose root cause was a token refresh answers true
 00558:     while its code and message remain the transport's. ``fmt`` is that
 00559:     transport's context, so it applies; the caller cannot tell a pure auth
 00560:     failure from a transport failure an auth error caused, and dropping the
 00561:     context is only ever wrong for the second.
 00562: 
 00563:     There are two callers, and the OIDC branch is reachable from one of them:
 00564: 
 00565:     * ``Sender.flush`` (in this file) applies ``fmt`` only on the TCP path,
 00566:       where native rejects ``oidc_auth`` outright ("Bearer token providers are
 00567:       supported only for ILP/HTTP(S) and QWP/WebSocket"), so the OIDC branch
 00568:       cannot fire there.
 00569:     * ``_dataframe_handle_auto_flush`` (``dataframe.pxi``) is
 00570:       protocol-agnostic, so an HTTP or QWP sender built with ``oidc_auth=``
 00571:       reaches this with a token failure during an auto-flush, and the
 00572:       ``args`` re-frame below runs in production.
 00573:     """
 00574:     # Use the same converter for every path: formatting must not flatten
 00575:     # generic provider failures, OIDC subclasses, or structured rejections.
 00576:     # It consumes err exactly once; args is what Exception.__str__ reads.
+00577:     cdef object exc = c_err_to_py(err)
  __pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 577, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_exc = __pyx_t_1;
  __pyx_t_1 = 0;
+00578:     exc.args = (fmt.format(str(exc)),)
  __pyx_t_1 = __Pyx_PyObject_Unicode(__pyx_v_exc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 578, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_CallUnboundCMethod1(&__pyx_mstate_global->__pyx_umethod_PyUnicode_Type__format, __pyx_v_fmt, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 578, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 578, __pyx_L1_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(0, 578, __pyx_L1_error);
  __pyx_t_2 = 0;
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_args, __pyx_t_1) < (0)) __PYX_ERR(0, 578, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+00579:     return exc
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_exc);
  __pyx_r = __pyx_v_exc;
  goto __pyx_L0;
 00580: 
 00581: 
+00582: cdef object _error_with_message(object exc, str msg):
static PyObject *__pyx_f_7questdb_7_client__error_with_message(PyObject *__pyx_v_exc, PyObject *__pyx_v_msg) {
  PyObject *__pyx_v_cls = 0;
  PyObject *__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_5);
  __Pyx_AddTraceback("questdb._client._error_with_message", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_cls);
  __Pyx_XDECREF(__pyx_v_out);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00583:     """A new exception of `exc`'s class carrying every field of `exc` and
 00584:     `msg` as its message, for `raise ... from exc`.
 00585: 
 00586:     Calling the class with `QuestDBError`'s positional signature does not
 00587:     work for every class `c_err_to_py` returns: `TokenUnavailableError`,
 00588:     `OidcDeviceFlowError` and `OidcTimeoutError` take one positional message
 00589:     and raise `TypeError`, and the other `OidcError` classes take the code as
 00590:     a message and fall back to their default code. Copying the instance
 00591:     keeps the class, `code`, `in_doubt`, `sender_error` and the subclass
 00592:     fields (`status`, `retry_after`, `retryable`, ...).
 00593:     """
+00594:     cdef object cls = type(exc)
  __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_v_exc)));
  __pyx_v_cls = ((PyObject *)Py_TYPE(__pyx_v_exc));
+00595:     cdef object out = cls.__new__(cls)
  __pyx_t_2 = __pyx_v_cls;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_cls};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_new, __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(0, 595, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_out = __pyx_t_1;
  __pyx_t_1 = 0;
+00596:     out.__dict__.update(exc.__dict__)
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_mstate_global->__pyx_n_u_dict); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 596, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __pyx_t_4;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_dict); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 596, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_update, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__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_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 596, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+00597:     out.args = (msg,)
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 597, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_msg);
  __Pyx_GIVEREF(__pyx_v_msg);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_msg) != (0)) __PYX_ERR(0, 597, __pyx_L1_error);
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_out, __pyx_mstate_global->__pyx_n_u_args, __pyx_t_1) < (0)) __PYX_ERR(0, 597, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+00598:     return out
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;
 00599: 
 00600: 
+00601: cdef inline void_int reserve_buffer(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_reserve_buffer(struct line_sender_buffer *__pyx_v_buffer, size_t __pyx_v_additional) {
  struct line_sender_error *__pyx_v_err;
  __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_2);
  __Pyx_AddTraceback("questdb._client.reserve_buffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00602:         line_sender_buffer* buffer,
 00603:         size_t additional) except -1:
+00604:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+00605:     if not line_sender_buffer_reserve(buffer, additional, &err):
  __pyx_t_1 = (!line_sender_buffer_reserve(__pyx_v_buffer, __pyx_v_additional, (&__pyx_v_err)));
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+00606:         raise c_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 606, __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(0, 606, __pyx_L1_error)
 00607: 
 00608: 
 00609: # First native connect-retry slice `_direct_conn_open_checked` runs between
 00610: # checks of the terminal-OIDC gate when a provider is attached. Later slices
 00611: # double, up to the remaining budget.
+00612: cdef uint64_t _OIDC_FOREGROUND_RETRY_SLICE_MS = 2000
  __pyx_v_7questdb_7_client__OIDC_FOREGROUND_RETRY_SLICE_MS = 0x7D0;
 00613: 
 00614: # A native slice that failed this much before its deadline gave up on an error
 00615: # the native reconnect loop treats as terminal; see `_direct_conn_open_checked`.
 00616: # Must stay well below `_OIDC_FOREGROUND_RETRY_SLICE_MS`.
+00617: cdef uint64_t _OIDC_FOREGROUND_SLICE_EARLY_MARGIN_MS = 100
  __pyx_v_7questdb_7_client__OIDC_FOREGROUND_SLICE_EARLY_MARGIN_MS = 0x64;
 00618: 
 00619: # The codes native `reconnect_error_is_terminal` stops its reconnect loop on
 00620: # (`qwp_ws_driver.rs`). Role rejects are exempt, including the
 00621: # ProtocolVersionError synthesized when durable ACK is required and every
 00622: # endpoint rejects by role. A 421 with a role header is RoleMismatch.
+00623: _NATIVE_RECONNECT_TERMINAL_CODES = frozenset((
  __pyx_t_20 = __Pyx_PyFrozenSet_New(__pyx_t_18); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 623, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_NATIVE_RECONNECT_TERMINAL_CODES, __pyx_t_20) < (0)) __PYX_ERR(0, 623, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+00624:     QuestDBErrorCode.AuthError,
  __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 624, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_AuthError); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 624, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
/* … */
  __pyx_t_18 = PyTuple_Pack(5, __pyx_t_16, __pyx_t_4, __pyx_t_25, __pyx_t_17, __pyx_t_20); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 624, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+00625:     QuestDBErrorCode.ConfigError,
  __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 625, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 625, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00626:     QuestDBErrorCode.ProtocolVersionError,
  __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 626, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_25 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_ProtocolVersionError); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 626, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00627:     QuestDBErrorCode.StoreResendRequired,
  __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 627, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_StoreResendRequired); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 627, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+00628:     QuestDBErrorCode.SymbolDictFull))
  __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_SymbolDictFull); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 00629: 
 00630: 
+00631: cdef inline bint _is_oidc_terminal_for_foreground(object exc):
static CYTHON_INLINE int __pyx_f_7questdb_7_client__is_oidc_terminal_for_foreground(PyObject *__pyx_v_exc) {
  PyObject *__pyx_v_mod = 0;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb._client._is_oidc_terminal_for_foreground", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_mod);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00632:     """Whether ``exc`` is an OIDC failure that a foreground retry cannot clear.
 00633: 
 00634:     ``OidcInteractionRequired`` alone needs this gate, and it covers three
 00635:     native conditions that are indistinguishable by class *and* by code:
 00636:     ``classify_provider_error`` reclassifies every OIDC ``InteractionRequired``
 00637:     to a retryable ``SocketError``, so ``exc.code`` cannot separate them.
 00638: 
 00639:     * Nobody has signed in, and nothing is in flight. Retrying re-polls a
 00640:       provider documented never to prompt, so the call would burn the whole
 00641:       reconnect budget (300s by default) only to raise the same error. Fail
 00642:       fast and let the caller run ``sign_in()``.
 00643:     * A peer ``sign_in()`` holds the acquisition lock, or a renderer callback
 00644:       is mid-paint. Both clear on their own -- the second in milliseconds --
 00645:       and ``oidc.h`` states normatively that a transport "must retry rather
 00646:       than terminalize" for the callback case. Retrying here is what the
 00647:       native side classified the error for.
 00648: 
 00649:     Native records which case produced this specific error in its structured
 00650:     OIDC payload. The converted exception carries that immutable classification
 00651:     as ``_acquisition_busy``; consulting the provider's current sign-in state
 00652:     here would race the callback or sign-in finishing between the native return
 00653:     and this Python check.
 00654: 
 00655:     Every other OIDC failure is already handled by the caller's code check:
 00656:     ``classify_provider_error`` exempts ``OidcErrorKind::Config`` from the
 00657:     reclassification to ``SocketError``, so an ``OidcConfigError`` arrives with
 00658:     ``ConfigError`` from both native conversion and direct Python construction
 00659:     and is terminal there.
 00660: 
 00661:     Resolved without importing: if ``questdb.auth`` was never imported then no
 00662:     OIDC error can exist, so this costs one dict lookup on the ordinary error
 00663:     path, and it cannot re-enter the import of the very module that imports
 00664:     this extension.
 00665: 
 00666:     It goes through ``_oidc_errors_module_if_ready`` rather than reading
 00667:     ``sys.modules`` directly so that the class this tests against is the same
 00668:     object the exception was built from. Two independent lookups can disagree
 00669:     after any ``sys.modules`` swap -- leaving ``isinstance`` permanently False
 00670:     and this gate silently disabled -- and a direct read can also observe the
 00671:     module mid-import, where ``OidcInteractionRequired`` does not exist yet and
 00672:     the attribute access would raise over the error being reported.
 00673:     """
+00674:     cdef object mod = _oidc_errors_module_if_ready()
  __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_errors_module_if_ready(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 674, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_mod = __pyx_t_1;
  __pyx_t_1 = 0;
+00675:     if mod is None:
  __pyx_t_2 = (__pyx_v_mod == Py_None);
  if (__pyx_t_2) {
/* … */
  }
+00676:         return False
    __pyx_r = 0;
    goto __pyx_L0;
+00677:     if not isinstance(exc, mod.OidcInteractionRequired):
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_mod, __pyx_mstate_global->__pyx_n_u_OidcInteractionRequired); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 677, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_exc, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 677, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (!__pyx_t_2);
  if (__pyx_t_3) {
/* … */
  }
+00678:         return False
    __pyx_r = 0;
    goto __pyx_L0;
 00679:     # This is metadata from the native error snapshot, not mutable provider
 00680:     # state. A callback can finish in the gap between native conversion and
 00681:     # this check; the error remains transient even after that happens.
+00682:     return not bool(getattr(exc, '_acquisition_busy', False))
  __pyx_t_4 = NULL;
  __pyx_t_5 = __Pyx_GetAttr3(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_acquisition_busy_2, Py_False); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 682, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __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_1)) __PYX_ERR(0, 682, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_1);
  }
  __pyx_t_3 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_t_1)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 682, __pyx_L1_error)
  __Pyx_DECREF((PyObject *)__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = (!__pyx_t_3);
  goto __pyx_L0;
 00683: 
 00684: 
+00685: def _debug_is_oidc_terminal_for_foreground(exc):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_99_debug_is_oidc_terminal_for_foreground(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_98_debug_is_oidc_terminal_for_foreground, "Internal test hook for the foreground OIDC retry gate.");
static PyMethodDef __pyx_mdef_7questdb_7_client_99_debug_is_oidc_terminal_for_foreground = {"_debug_is_oidc_terminal_for_foreground", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_99_debug_is_oidc_terminal_for_foreground, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_98_debug_is_oidc_terminal_for_foreground};
static PyObject *__pyx_pw_7questdb_7_client_99_debug_is_oidc_terminal_for_foreground(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_exc = 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_is_oidc_terminal_for_foreground (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_exc,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(0, 685, __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(0, 685, __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_is_oidc_terminal_for_foreground", 0) < (0)) __PYX_ERR(0, 685, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_is_oidc_terminal_for_foreground", 1, 1, 1, i); __PYX_ERR(0, 685, __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(0, 685, __pyx_L3_error)
    }
    __pyx_v_exc = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_debug_is_oidc_terminal_for_foreground", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 685, __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_is_oidc_terminal_for_foreground", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_98_debug_is_oidc_terminal_for_foreground(__pyx_self, __pyx_v_exc);
  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_98_debug_is_oidc_terminal_for_foreground(CYTHON_UNUSED PyObject *__pyx_self, 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._debug_is_oidc_terminal_for_foreground", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_99_debug_is_oidc_terminal_for_foreground, 0, __pyx_mstate_global->__pyx_n_u_debug_is_oidc_terminal_for_fore, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[156])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 685, __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 (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_is_oidc_terminal_for_fore, __pyx_t_20) < (0)) __PYX_ERR(0, 685, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
 00686:     """Internal test hook for the foreground OIDC retry gate."""
+00687:     return bool(_is_oidc_terminal_for_foreground(exc))
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = NULL;
  __pyx_t_3 = __pyx_f_7questdb_7_client__is_oidc_terminal_for_foreground(__pyx_v_exc); if (unlikely(__pyx_t_3 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 687, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 687, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_5, (2-__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(0, 687, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_1);
  }
  __pyx_r = ((PyObject *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 00688: 
 00689: 
+00690: cdef object _utf8_decode_error(
static PyObject *__pyx_f_7questdb_7_client__utf8_decode_error(PyObject *__pyx_v_string, uint32_t __pyx_v_bad_codepoint) {
  PyObject *__pyx_v_s = 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_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("questdb._client._utf8_decode_error", __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;
}
 00691:         PyObject* string, uint32_t bad_codepoint):
+00692:     cdef str s = <str><object>string
  __pyx_t_1 = ((PyObject *)__pyx_v_string);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_s = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+00693:     return QuestDBError(
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 693, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
+00694:         QuestDBErrorCode.InvalidUtf8,
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 694, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidUtf8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 694, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+00695:         f'Invalid codepoint 0x{bad_codepoint:x} in string {s!r}: ' +
  __pyx_t_4 = __Pyx_PyUnicode_From_uint32_t(__pyx_v_bad_codepoint, 0, ' ', 'x'); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 695, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_s), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 695, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7[0] = __pyx_mstate_global->__pyx_kp_u_Invalid_codepoint_0x;
  __pyx_t_7[1] = __pyx_t_4;
  __pyx_t_7[2] = __pyx_mstate_global->__pyx_kp_u_in_string;
  __pyx_t_7[3] = __pyx_t_6;
  __pyx_t_7[4] = __pyx_mstate_global->__pyx_kp_u_Cannot_be_encoded_as_UTF_8;
  __pyx_t_8 = __Pyx_PyUnicode_Join(__pyx_t_7, 5, 20 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4) + 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6) + 29, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6));
  if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 695, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_9 = 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_9 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_5, __pyx_t_8};
    __pyx_t_1 = __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_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 693, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 00696:         'Cannot be encoded as UTF-8.')
 00697: 
 00698: 
+00699: cdef str _fqn(type obj):
static PyObject *__pyx_f_7questdb_7_client__fqn(PyTypeObject *__pyx_v_obj) {
  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_AddTraceback("questdb._client._fqn", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+00700:     if obj.__module__ == 'builtins':
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_mstate_global->__pyx_n_u_module); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 700, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_builtins, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 700, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+00701:         return obj.__qualname__
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_mstate_global->__pyx_n_u_qualname); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 701, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(0, 701, __pyx_L1_error)
    __pyx_r = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
    goto __pyx_L0;
 00702:     else:
+00703:         return f'{obj.__module__}.{obj.__qualname__}'
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_mstate_global->__pyx_n_u_module); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 703, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_t_1, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 703, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_obj), __pyx_mstate_global->__pyx_n_u_qualname); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 703, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_t_1, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 703, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5[0] = __pyx_t_3;
    __pyx_t_5[1] = __pyx_mstate_global->__pyx_kp_u__2;
    __pyx_t_5[2] = __pyx_t_4;
    __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_5, 3, __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + 1 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4));
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 703, __pyx_L1_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_r = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }
 00704: 
 00705: 
 00706: # The only names `Sender` (on PyPy) and `QuestDB` keep in their instance
 00707: # dictionary.
+00708: cdef tuple _DICT_ONLY_ATTRS = ('_bearer_token_provider',)
  __Pyx_INCREF(__pyx_mstate_global->__pyx_tuple[33]);
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__DICT_ONLY_ATTRS);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__DICT_ONLY_ATTRS, __pyx_mstate_global->__pyx_tuple[33]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[33]);
/* … */
  __pyx_mstate_global->__pyx_tuple[33] = PyTuple_Pack(1, __pyx_mstate_global->__pyx_n_u_bearer_token_provider); if (unlikely(!__pyx_mstate_global->__pyx_tuple[33])) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[33]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[33]);
+00709: cdef object _NO_SUCH_ATTR = object()
  __pyx_t_18 = NULL;
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_18, NULL};
    __pyx_t_20 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_object, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
    if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 709, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_20);
  }
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__NO_SUCH_ATTR);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__NO_SUCH_ATTR, __pyx_t_20);
  __Pyx_GIVEREF(__pyx_t_20);
  __pyx_t_20 = 0;
 00710: 
 00711: 
+00712: cdef void_int _setattr_without_dict(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__setattr_without_dict(PyObject *__pyx_v_obj, PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_dict_only, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
  PyObject *__pyx_v_descr = 0;
  PyObject *__pyx_v_klass = NULL;
  __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_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("questdb._client._setattr_without_dict", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_descr);
  __Pyx_XDECREF(__pyx_v_klass);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00713:         object obj, type cls, tuple dict_only, object name,
 00714:         object value) except -1:
 00715:     """Set `name` on `obj` as if `cls` had no instance dictionary, except
 00716:     for the names in `dict_only`.
 00717: 
 00718:     `Sender` and `QuestDB` have a `__dict__` only to hold the bearer-token
 00719:     holder where PyPy's collector can see it (`Sender` uses it only on PyPy;
 00720:     see `_sender_hold_bearer`), and `RefreshingTokenProvider` only to hold
 00721:     its native handle there. Any other new name -- a misspelt or invented
 00722:     setting such as `sender.request_timeout = 5000` or
 00723:     `tokens.cold_wait = 5` -- would otherwise be stored and read back while
 00724:     configuring nothing, where it used to raise `AttributeError`. Python
 00725:     subclasses keep the dictionary every subclass of an extension type has
 00726:     always had; those of `Sender` and `RefreshingTokenProvider` also get the
 00727:     generic setter back (see `_subclass_keeps_generic_setattr`).
 00728:     """
+00729:     cdef object descr = _NO_SUCH_ATTR
  __Pyx_INCREF(__pyx_v_7questdb_7_client__NO_SUCH_ATTR);
  __pyx_v_descr = __pyx_v_7questdb_7_client__NO_SUCH_ATTR;
+00730:     if (type(obj) is cls and isinstance(name, str)
  __pyx_t_2 = (((PyObject *)Py_TYPE(__pyx_v_obj)) == ((PyObject *)__pyx_v_cls));
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
/* … */
  __pyx_t_2 = PyUnicode_Check(__pyx_v_name); 
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
/* … */
  if (__pyx_t_1) {
/* … */
  }
+00731:             and name not in dict_only):
  __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_name, __pyx_v_dict_only, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 731, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
+00732:         for klass in cls.__mro__:
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_cls), __pyx_mstate_global->__pyx_n_u_mro); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 732, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) {
      __pyx_t_4 = __pyx_t_3; __Pyx_INCREF(__pyx_t_4);
      __pyx_t_5 = 0;
      __pyx_t_6 = NULL;
    } else {
      __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 732, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_6 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 732, __pyx_L1_error)
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    for (;;) {
      if (likely(!__pyx_t_6)) {
        if (likely(PyList_CheckExact(__pyx_t_4))) {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4);
            #if !CYTHON_ASSUME_SAFE_SIZE
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 732, __pyx_L1_error)
            #endif
            if (__pyx_t_5 >= __pyx_temp) break;
          }
          __pyx_t_3 = __Pyx_PyList_GetItemRefFast(__pyx_t_4, __pyx_t_5, __Pyx_ReferenceSharing_OwnStrongReference);
          ++__pyx_t_5;
        } else {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_4);
            #if !CYTHON_ASSUME_SAFE_SIZE
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 732, __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_4, __pyx_t_5));
          #else
          __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_5);
          #endif
          ++__pyx_t_5;
        }
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 732, __pyx_L1_error)
      } else {
        __pyx_t_3 = __pyx_t_6(__pyx_t_4);
        if (unlikely(!__pyx_t_3)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 732, __pyx_L1_error)
            PyErr_Clear();
          }
          break;
        }
      }
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_XDECREF_SET(__pyx_v_klass, __pyx_t_3);
      __pyx_t_3 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L10_for_end;
    __pyx_L8_break:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L10_for_end;
    __pyx_L10_for_end:;
+00733:             descr = klass.__dict__.get(name, _NO_SUCH_ATTR)
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_klass, __pyx_mstate_global->__pyx_n_u_dict); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 733, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_7 = __pyx_t_8;
      __Pyx_INCREF(__pyx_t_7);
      __pyx_t_9 = 0;
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_v_name, __pyx_v_7questdb_7_client__NO_SUCH_ATTR};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_9, (3-__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(0, 733, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      __Pyx_DECREF_SET(__pyx_v_descr, __pyx_t_3);
      __pyx_t_3 = 0;
+00734:             if descr is not _NO_SUCH_ATTR:
      __pyx_t_1 = (__pyx_v_descr != __pyx_v_7questdb_7_client__NO_SUCH_ATTR);
      if (__pyx_t_1) {
/* … */
      }
+00735:                 break
        goto __pyx_L8_break;
+00736:         if descr is _NO_SUCH_ATTR:
    __pyx_t_1 = (__pyx_v_descr == __pyx_v_7questdb_7_client__NO_SUCH_ATTR);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+00737:             raise AttributeError(
      __pyx_t_3 = NULL;
+00738:                 f"'{_fqn(cls)}' object has no attribute {name!r}")
      __pyx_t_8 = __pyx_f_7questdb_7_client__fqn(__pyx_v_cls); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 738, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 738, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 738, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_10[0] = __pyx_mstate_global->__pyx_kp_u__4;
      __pyx_t_10[1] = __pyx_t_7;
      __pyx_t_10[2] = __pyx_mstate_global->__pyx_kp_u_object_has_no_attribute;
      __pyx_t_10[3] = __pyx_t_8;
      __pyx_t_11 = __Pyx_PyUnicode_Join(__pyx_t_10, 4, 1 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7) + 26 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8));
      if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 738, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_9 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_11};
        __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_AttributeError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 737, __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(0, 737, __pyx_L1_error)
+00739:         if not hasattr(type(descr), '__set__'):
    __pyx_t_1 = __Pyx_HasAttr(((PyObject *)Py_TYPE(__pyx_v_descr)), __pyx_mstate_global->__pyx_n_u_set_2); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 739, __pyx_L1_error)
    __pyx_t_2 = (!__pyx_t_1);
    if (unlikely(__pyx_t_2)) {
/* … */
    }
+00740:             raise AttributeError(
      __pyx_t_11 = NULL;
+00741:                 f"'{_fqn(cls)}' object attribute {name!r} is read-only")
      __pyx_t_3 = __pyx_f_7questdb_7_client__fqn(__pyx_v_cls); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 741, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 741, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 741, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_12[0] = __pyx_mstate_global->__pyx_kp_u__4;
      __pyx_t_12[1] = __pyx_t_8;
      __pyx_t_12[2] = __pyx_mstate_global->__pyx_kp_u_object_attribute;
      __pyx_t_12[3] = __pyx_t_3;
      __pyx_t_12[4] = __pyx_mstate_global->__pyx_kp_u_is_read_only;
      __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_12, 5, 1 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8) + 19 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + 13, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3));
      if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 741, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_9 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_t_7};
        __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_AttributeError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 740, __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(0, 740, __pyx_L1_error)
 00742:     # Not `object.__setattr__`: before 3.13 CPython refuses it ("can't apply
 00743:     # this __setattr__") on any instance whose type, like `cls`, overrides
 00744:     # the C-level setattr slot. This is the function it would have called.
+00745:     PyObject_GenericSetAttr(obj, name, value)
  __pyx_t_13 = PyObject_GenericSetAttr(__pyx_v_obj, __pyx_v_name, __pyx_v_value); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 745, __pyx_L1_error)
+00746:     return 0
  __pyx_r = 0;
  goto __pyx_L0;
 00747: 
 00748: 
+00749: cdef bint _method_not_overridden(
static int __pyx_f_7questdb_7_client__method_not_overridden(PyObject *__pyx_v_obj, PyTypeObject *__pyx_v_owner, PyObject *__pyx_v_name) {
  PyObject *__pyx_v_instance_dict = 0;
  PyObject *__pyx_v_klass = NULL;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client._method_not_overridden", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_instance_dict);
  __Pyx_XDECREF(__pyx_v_klass);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00750:         object obj, type owner, str name) except -1:
 00751:     """Whether ``obj.<name>`` resolves to ``owner``'s own definition: no class
 00752:     ahead of ``owner`` in the MRO defines it, and no instance attribute
 00753:     shadows it. Reads only class and instance dictionaries, so it runs no
 00754:     descriptor."""
+00755:     cdef object instance_dict = getattr(obj, '__dict__', None)
  __pyx_t_1 = __Pyx_GetAttr3(__pyx_v_obj, __pyx_mstate_global->__pyx_n_u_dict, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 755, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_instance_dict = __pyx_t_1;
  __pyx_t_1 = 0;
+00756:     if isinstance(instance_dict, dict) and name in instance_dict:
  __pyx_t_3 = PyDict_Check(__pyx_v_instance_dict); 
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_name, __pyx_v_instance_dict, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 756, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {
/* … */
  }
+00757:         return False
    __pyx_r = 0;
    goto __pyx_L0;
+00758:     for klass in type(obj).__mro__:
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_obj)), __pyx_mstate_global->__pyx_n_u_mro); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 758, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
    __pyx_t_4 = __pyx_t_1; __Pyx_INCREF(__pyx_t_4);
    __pyx_t_5 = 0;
    __pyx_t_6 = NULL;
  } else {
    __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 758, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 758, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    if (likely(!__pyx_t_6)) {
      if (likely(PyList_CheckExact(__pyx_t_4))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 758, __pyx_L1_error)
          #endif
          if (__pyx_t_5 >= __pyx_temp) break;
        }
        __pyx_t_1 = __Pyx_PyList_GetItemRefFast(__pyx_t_4, __pyx_t_5, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_5;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_4);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 758, __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_4, __pyx_t_5));
        #else
        __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_5);
        #endif
        ++__pyx_t_5;
      }
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 758, __pyx_L1_error)
    } else {
      __pyx_t_1 = __pyx_t_6(__pyx_t_4);
      if (unlikely(!__pyx_t_1)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 758, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_klass, __pyx_t_1);
    __pyx_t_1 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+00759:         if name in klass.__dict__:
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_klass, __pyx_mstate_global->__pyx_n_u_dict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 759, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_name, __pyx_t_1, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 759, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_2) {
/* … */
    }
+00760:             return klass is owner
      __pyx_t_2 = (__pyx_v_klass == ((PyObject *)__pyx_v_owner));
      __pyx_r = __pyx_t_2;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      goto __pyx_L0;
+00761:     return False
  __pyx_r = 0;
  goto __pyx_L0;
 00762: 
 00763: 
+00764: cdef void_int _subclass_keeps_generic_setattr(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__subclass_keeps_generic_setattr(PyTypeObject *__pyx_v_cls, PyTypeObject *__pyx_v_ext_cls) {
  PyObject *__pyx_v_setattr_owner = 0;
  PyObject *__pyx_v_delattr_owner = 0;
  int __pyx_v_after_ext;
  PyObject *__pyx_v_klass = NULL;
  PyObject *__pyx_v_attrs = NULL;
  PyObject *__pyx_v_name = 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_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(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_AddTraceback("questdb._client._subclass_keeps_generic_setattr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_setattr_owner);
  __Pyx_XDECREF(__pyx_v_delattr_owner);
  __Pyx_XDECREF(__pyx_v_klass);
  __Pyx_XDECREF(__pyx_v_attrs);
  __Pyx_XDECREF(__pyx_v_name);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00765:         type cls, type ext_cls) except -1:
 00766:     """Give `cls`, a Python subclass of `ext_cls`, the generic attribute
 00767:     setter back, unless a class in between sets attributes its own way.
 00768: 
 00769:     `ext_cls.__setattr__` refuses new names only on `ext_cls` itself, but a
 00770:     subclass inherits the override all the same: each of its attribute
 00771:     stores would pay for the call, and CPython 3.11+ does not specialize
 00772:     stores on a type that overrides the setter, so a `__slots__` store runs
 00773:     about twice as slow.
 00774: 
 00775:     A class after `ext_cls` in the MRO that sets or deletes attributes its
 00776:     own way -- `Mixin` in `class S(Sender, Mixin)` -- is refused instead:
 00777:     Python finds `ext_cls`'s method first, so the class's own would silently
 00778:     never run, where it did before `ext_cls` had one. Listed before
 00779:     `ext_cls`, it runs.
 00780:     """
+00781:     cdef object setattr_owner = None
  __Pyx_INCREF(Py_None);
  __pyx_v_setattr_owner = Py_None;
+00782:     cdef object delattr_owner = None
  __Pyx_INCREF(Py_None);
  __pyx_v_delattr_owner = Py_None;
+00783:     cdef bint after_ext = False
  __pyx_v_after_ext = 0;
+00784:     for klass in cls.__mro__:
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_cls), __pyx_mstate_global->__pyx_n_u_mro); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 784, __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(0, 784, __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(0, 784, __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(0, 784, __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(0, 784, __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(0, 784, __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(0, 784, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_klass, __pyx_t_1);
    __pyx_t_1 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+00785:         attrs = klass.__dict__
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_klass, __pyx_mstate_global->__pyx_n_u_dict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 785, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_attrs, __pyx_t_1);
    __pyx_t_1 = 0;
+00786:         if after_ext and klass is not object:
    if (__pyx_v_after_ext) {
    } else {
      __pyx_t_5 = __pyx_v_after_ext;
      goto __pyx_L6_bool_binop_done;
    }
    __pyx_t_6 = (__pyx_v_klass != __pyx_builtin_object);
    __pyx_t_5 = __pyx_t_6;
    __pyx_L6_bool_binop_done:;
    if (__pyx_t_5) {
/* … */
    }
+00787:             for name in ('__setattr__', '__delattr__'):
      __pyx_t_1 = __pyx_mstate_global->__pyx_tuple[10]; __Pyx_INCREF(__pyx_t_1);
      __pyx_t_7 = 0;
      for (;;) {
        if (__pyx_t_7 >= 2) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_8 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_7));
        #else
        __pyx_t_8 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_7);
        #endif
        ++__pyx_t_7;
        if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 787, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_XDECREF_SET(__pyx_v_name, ((PyObject*)__pyx_t_8));
        __pyx_t_8 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_mstate_global->__pyx_tuple[10] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_setattr, __pyx_mstate_global->__pyx_n_u_delattr); if (unlikely(!__pyx_mstate_global->__pyx_tuple[10])) __PYX_ERR(0, 787, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[10]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[10]);
+00788:                 if name in attrs:
        __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_v_name, __pyx_v_attrs, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 788, __pyx_L1_error)
        if (unlikely(__pyx_t_5)) {
/* … */
        }
+00789:                     raise TypeError(
          __pyx_t_9 = NULL;
+00790:                         f'{klass.__name__}.{name} would never run on '
          __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_klass, __pyx_mstate_global->__pyx_n_u_name_2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 790, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_11 = __Pyx_PyObject_FormatSimple(__pyx_t_10, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 790, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __pyx_t_10 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 790, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
/* … */
          __pyx_t_15 = __Pyx_PyUnicode_Join(__pyx_t_18, 14, __Pyx_PyUnicode_GET_LENGTH(__pyx_t_11) + 1 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10) + 20 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14) + 64 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12) + 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16) + 8 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17) + 14, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_11) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_10) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17));
          if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 790, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __pyx_t_19 = 1;
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_15};
            __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_19, (2-__pyx_t_19) | (__pyx_t_19*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 789, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_8);
          }
          __Pyx_Raise(__pyx_t_8, 0, 0, 0);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __PYX_ERR(0, 789, __pyx_L1_error)
+00791:                         f'{cls.__name__}: {ext_cls.__name__}, which comes '
          __pyx_t_12 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_cls), __pyx_mstate_global->__pyx_n_u_name_2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 791, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_13 = __Pyx_PyObject_FormatSimple(__pyx_t_12, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 791, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __pyx_t_12 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_ext_cls), __pyx_mstate_global->__pyx_n_u_name_2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 791, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_14 = __Pyx_PyObject_FormatSimple(__pyx_t_12, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 791, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_14);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
 00792:                         'before it in the method resolution order, defines '
+00793:                         f'{name} too. List {klass.__name__} before '
          __pyx_t_12 = __Pyx_PyUnicode_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 793, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_klass, __pyx_mstate_global->__pyx_n_u_name_2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 793, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_16 = __Pyx_PyObject_FormatSimple(__pyx_t_15, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 793, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_16);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+00794:                         f'{ext_cls.__name__} in the bases.')
          __pyx_t_15 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_ext_cls), __pyx_mstate_global->__pyx_n_u_name_2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 794, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_17 = __Pyx_PyObject_FormatSimple(__pyx_t_15, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 794, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_17);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __pyx_t_18[0] = __pyx_t_11;
          __pyx_t_18[1] = __pyx_mstate_global->__pyx_kp_u__2;
          __pyx_t_18[2] = __pyx_t_10;
          __pyx_t_18[3] = __pyx_mstate_global->__pyx_kp_u_would_never_run_on;
          __pyx_t_18[4] = __pyx_t_13;
          __pyx_t_18[5] = __pyx_mstate_global->__pyx_kp_u_;
          __pyx_t_18[6] = __pyx_t_14;
          __pyx_t_18[7] = __pyx_mstate_global->__pyx_kp_u_which_comes_before_it_in_the_me;
          __pyx_t_18[8] = __pyx_t_12;
          __pyx_t_18[9] = __pyx_mstate_global->__pyx_kp_u_too_List;
          __pyx_t_18[10] = __pyx_t_16;
          __pyx_t_18[11] = __pyx_mstate_global->__pyx_kp_u_before;
          __pyx_t_18[12] = __pyx_t_17;
          __pyx_t_18[13] = __pyx_mstate_global->__pyx_kp_u_in_the_bases;
+00795:         if klass is ext_cls:
    __pyx_t_5 = (__pyx_v_klass == ((PyObject *)__pyx_v_ext_cls));
    if (__pyx_t_5) {
/* … */
    }
+00796:             after_ext = True
      __pyx_v_after_ext = 1;
+00797:         if setattr_owner is None and '__setattr__' in attrs:
    __pyx_t_6 = (__pyx_v_setattr_owner == Py_None);
    if (__pyx_t_6) {
    } else {
      __pyx_t_5 = __pyx_t_6;
      goto __pyx_L14_bool_binop_done;
    }
    __pyx_t_6 = (__Pyx_PySequence_ContainsTF(__pyx_mstate_global->__pyx_n_u_setattr, __pyx_v_attrs, Py_EQ)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 797, __pyx_L1_error)
    __pyx_t_5 = __pyx_t_6;
    __pyx_L14_bool_binop_done:;
    if (__pyx_t_5) {
/* … */
    }
+00798:             setattr_owner = klass
      __Pyx_INCREF(__pyx_v_klass);
      __Pyx_DECREF_SET(__pyx_v_setattr_owner, __pyx_v_klass);
+00799:         if delattr_owner is None and '__delattr__' in attrs:
    __pyx_t_6 = (__pyx_v_delattr_owner == Py_None);
    if (__pyx_t_6) {
    } else {
      __pyx_t_5 = __pyx_t_6;
      goto __pyx_L17_bool_binop_done;
    }
    __pyx_t_6 = (__Pyx_PySequence_ContainsTF(__pyx_mstate_global->__pyx_n_u_delattr, __pyx_v_attrs, Py_EQ)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 799, __pyx_L1_error)
    __pyx_t_5 = __pyx_t_6;
    __pyx_L17_bool_binop_done:;
    if (__pyx_t_5) {
/* … */
    }
+00800:             delattr_owner = klass
      __Pyx_INCREF(__pyx_v_klass);
      __Pyx_DECREF_SET(__pyx_v_delattr_owner, __pyx_v_klass);
+00801:     if setattr_owner is ext_cls and delattr_owner in (ext_cls, object):
  __pyx_t_6 = (__pyx_v_setattr_owner == ((PyObject *)__pyx_v_ext_cls));
  if (__pyx_t_6) {
  } else {
    __pyx_t_5 = __pyx_t_6;
    goto __pyx_L21_bool_binop_done;
  }
  __Pyx_INCREF(__pyx_v_delattr_owner);
  __pyx_t_2 = __pyx_v_delattr_owner;
  __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, ((PyObject *)__pyx_v_ext_cls), Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 801, __pyx_L1_error)
  __pyx_t_20 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_20 < 0))) __PYX_ERR(0, 801, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!__pyx_t_20) {
  } else {
    __pyx_t_6 = __pyx_t_20;
    goto __pyx_L23_bool_binop_done;
  }
  __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_builtin_object, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 801, __pyx_L1_error)
  __pyx_t_20 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_20 < 0))) __PYX_ERR(0, 801, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_6 = __pyx_t_20;
  __pyx_L23_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_20 = __pyx_t_6;
  __pyx_t_5 = __pyx_t_20;
  __pyx_L21_bool_binop_done:;
  if (__pyx_t_5) {
/* … */
  }
+00802:         cls.__setattr__ = object.__setattr__
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_builtin_object, __pyx_mstate_global->__pyx_n_u_setattr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 802, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_cls), __pyx_mstate_global->__pyx_n_u_setattr, __pyx_t_2) < (0)) __PYX_ERR(0, 802, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+00803:         cls.__delattr__ = object.__delattr__
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_builtin_object, __pyx_mstate_global->__pyx_n_u_delattr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 803, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_cls), __pyx_mstate_global->__pyx_n_u_delattr, __pyx_t_2) < (0)) __PYX_ERR(0, 803, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+00804:     return 0
  __pyx_r = 0;
  goto __pyx_L0;
 00805: 
 00806: 
+00807: def _sender_init_subclass(cls, **kwargs):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_101_sender_init_subclass(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_101_sender_init_subclass = {"_sender_init_subclass", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_101_sender_init_subclass, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_101_sender_init_subclass(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_cls = 0;
  PyObject *__pyx_v_kwargs = 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("_sender_init_subclass (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);
  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL;
  __Pyx_GOTREF(__pyx_v_kwargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_cls,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(0, 807, __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(0, 807, __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, __pyx_v_kwargs, values, kwd_pos_args, __pyx_kwds_len, "_sender_init_subclass", 1) < (0)) __PYX_ERR(0, 807, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_sender_init_subclass", 1, 1, 1, i); __PYX_ERR(0, 807, __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(0, 807, __pyx_L3_error)
    }
    __pyx_v_cls = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_sender_init_subclass", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 807, __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_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
  __Pyx_AddTraceback("questdb._client._sender_init_subclass", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_100_sender_init_subclass(__pyx_self, __pyx_v_cls, __pyx_v_kwargs);
  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_DECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_100_sender_init_subclass(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_cls, PyObject *__pyx_v_kwargs) {
  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_4);
  __Pyx_AddTraceback("questdb._client._sender_init_subclass", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_101_sender_init_subclass, 0, __pyx_mstate_global->__pyx_n_u_sender_init_subclass, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[157])); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 807, __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 (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_sender_init_subclass, __pyx_t_20) < (0)) __PYX_ERR(0, 807, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+00808:     super(Sender, cls).__init_subclass__(**kwargs)
  __pyx_t_2 = NULL;
  __pyx_t_3 = 1;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, ((PyObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender), __pyx_v_cls};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_super, __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;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 808, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_init_subclass); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 808, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyDict_Copy(__pyx_v_kwargs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 808, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_mstate_global->__pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 808, __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_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+00809:     _subclass_keeps_generic_setattr(cls, Sender)
  __pyx_t_4 = __pyx_v_cls;
  __Pyx_INCREF(__pyx_t_4);
  if (!(likely(PyType_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("type", __pyx_t_4))) __PYX_ERR(0, 809, __pyx_L1_error)
  __pyx_t_5 = __pyx_f_7questdb_7_client__subclass_keeps_generic_setattr(((PyTypeObject*)__pyx_t_4), __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender); if (unlikely(__pyx_t_5 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 809, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 00810: 
 00811: 
+00812: cdef inline void_int _encode_utf8(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__encode_utf8(struct qdb_pystr_buf *__pyx_v_b, PyObject *__pyx_v_string, struct line_sender_utf8 *__pyx_v_utf8_out) {
  uint32_t __pyx_v_bad_codepoint;
  size_t __pyx_v_count;
  int __pyx_v_kind;
  __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_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("questdb._client._encode_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00813:         qdb_pystr_buf* b,
 00814:         PyObject* string,
 00815:         line_sender_utf8* utf8_out) except -1:
+00816:     cdef uint32_t bad_codepoint = 0
  __pyx_v_bad_codepoint = 0;
+00817:     cdef size_t count = <size_t>(PyUnicode_GET_LENGTH(string))
  __pyx_v_count = ((size_t)PyUnicode_GET_LENGTH(__pyx_v_string));
+00818:     cdef int kind = PyUnicode_KIND(string)
  __pyx_v_kind = PyUnicode_KIND(__pyx_v_string);
+00819:     if kind == PyUnicode_1BYTE_KIND:
  switch (__pyx_v_kind) {
    case PyUnicode_1BYTE_KIND:
/* … */
    break;
    case PyUnicode_2BYTE_KIND:
 00820:         # No error handling for UCS1: All code points translate into valid UTF8.
+00821:         qdb_ucs1_to_utf8(
    qdb_ucs1_to_utf8(__pyx_v_b, __pyx_v_count, PyUnicode_1BYTE_DATA(__pyx_v_string), (&__pyx_v_utf8_out->len), (&__pyx_v_utf8_out->buf));
 00822:             b,
 00823:             count,
 00824:             PyUnicode_1BYTE_DATA(string),
 00825:             &utf8_out.len,
 00826:             &utf8_out.buf)
+00827:     elif kind == PyUnicode_2BYTE_KIND:
    break;
    case PyUnicode_4BYTE_KIND:
+00828:         if not qdb_ucs2_to_utf8(
    __pyx_t_1 = (!qdb_ucs2_to_utf8(__pyx_v_b, __pyx_v_count, PyUnicode_2BYTE_DATA(__pyx_v_string), (&__pyx_v_utf8_out->len), (&__pyx_v_utf8_out->buf), (&__pyx_v_bad_codepoint)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
 00829:                 b,
 00830:                 count,
 00831:                 PyUnicode_2BYTE_DATA(string),
 00832:                 &utf8_out.len,
 00833:                 &utf8_out.buf,
 00834:                 &bad_codepoint):
+00835:             raise _utf8_decode_error(string, bad_codepoint)
      __pyx_t_2 = __pyx_f_7questdb_7_client__utf8_decode_error(__pyx_v_string, __pyx_v_bad_codepoint); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 835, __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(0, 835, __pyx_L1_error)
+00836:     elif kind == PyUnicode_4BYTE_KIND:
    break;
    default:
+00837:         if not qdb_ucs4_to_utf8(
    __pyx_t_1 = (!qdb_ucs4_to_utf8(__pyx_v_b, __pyx_v_count, ((uint32_t const *)PyUnicode_4BYTE_DATA(__pyx_v_string)), (&__pyx_v_utf8_out->len), (&__pyx_v_utf8_out->buf), (&__pyx_v_bad_codepoint)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
 00838:                 b,
 00839:                 count,
 00840: 
 00841:                 # This cast is required and is possibly a Cython compiler bug.
 00842:                 # It doesn't recognize that `const Py_UCS4*`
 00843:                 # is the same as `const uint32_t*`.
 00844:                 <const uint32_t*>PyUnicode_4BYTE_DATA(string),
 00845: 
 00846:                 &utf8_out.len,
 00847:                 &utf8_out.buf,
 00848:                 &bad_codepoint):
+00849:             raise _utf8_decode_error(string, bad_codepoint)
      __pyx_t_2 = __pyx_f_7questdb_7_client__utf8_decode_error(__pyx_v_string, __pyx_v_bad_codepoint); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 849, __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(0, 849, __pyx_L1_error)
 00850:     else:
+00851:         raise ValueError(f'Unknown UCS kind: {kind}.')
    __pyx_t_3 = NULL;
    __pyx_t_4 = __Pyx_PyUnicode_From_int(__pyx_v_kind, 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 851, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5[0] = __pyx_mstate_global->__pyx_kp_u_Unknown_UCS_kind;
    __pyx_t_5[1] = __pyx_t_4;
    __pyx_t_5[2] = __pyx_mstate_global->__pyx_kp_u__2;
    __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_5, 3, 18 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4) + 1, 127);
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 851, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_7 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_6};
      __pyx_t_2 = __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_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 851, __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(0, 851, __pyx_L1_error)
    break;
  }
 00852: 
 00853: 
+00854: cdef void_int str_to_utf8(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_str_to_utf8(struct qdb_pystr_buf *__pyx_v_b, PyObject *__pyx_v_string, struct line_sender_utf8 *__pyx_v_utf8_out) {
  __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_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb._client.str_to_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00855:         qdb_pystr_buf* b,
 00856:         PyObject* string,
 00857:         line_sender_utf8* utf8_out) except -1:
 00858:     """
 00859:     Convert a Python string to a UTF-8 borrowed buffer.
 00860:     This is done without allocating new Python `bytes` objects.
 00861:     In case the string is an ASCII string, it's also generally zero-copy.
 00862:     The `utf8_out` param will point to (borrow from) either the ASCII buffer
 00863:     inside the original Python object or a part of memory allocated inside the
 00864:     `b` buffer.
 00865: 
 00866:     If you need to use `utf8_out` without the GIL, call `qdb_pystr_buf_copy`.
 00867:     """
+00868:     if not PyUnicode_CheckExact(string):
  __pyx_t_1 = (!PyUnicode_CheckExact(__pyx_v_string));
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+00869:         raise TypeError(
    __pyx_t_3 = NULL;
+00870:             'Expected a str object, not an object of type ' +
    __pyx_t_5 = __Pyx_PyUnicode_ConcatSafe(__pyx_mstate_global->__pyx_kp_u_Expected_a_str_object_not_an_obj, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 870, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5};
      __pyx_t_2 = __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_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 869, __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(0, 869, __pyx_L1_error)
+00871:             _fqn(type(<str><object>string)))
    __pyx_t_4 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_string))))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 871, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+00872:     PyUnicode_READY(string)
  __pyx_t_7 = PyUnicode_READY(__pyx_v_string); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 872, __pyx_L1_error)
 00873: 
 00874:     # We optimize the common case of ASCII strings.
 00875:     # This avoid memory allocations and copies altogether.
 00876:     # We get away with this because ASCII is a subset of UTF-8.
+00877:     if PyUnicode_IS_COMPACT_ASCII(string):
  __pyx_t_1 = PyUnicode_IS_COMPACT_ASCII(__pyx_v_string);
  if (__pyx_t_1) {
/* … */
  }
+00878:         utf8_out.len = <size_t>(PyUnicode_GET_LENGTH(string))
    __pyx_v_utf8_out->len = ((size_t)PyUnicode_GET_LENGTH(__pyx_v_string));
+00879:         utf8_out.buf = <const char*>(PyUnicode_1BYTE_DATA(string))
    __pyx_v_utf8_out->buf = ((char const *)PyUnicode_1BYTE_DATA(__pyx_v_string));
+00880:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
 00881: 
+00882:     _encode_utf8(b, string, utf8_out)
  __pyx_t_8 = __pyx_f_7questdb_7_client__encode_utf8(__pyx_v_b, __pyx_v_string, __pyx_v_utf8_out); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 882, __pyx_L1_error)
 00883: 
 00884: 
 00885: 
+00886: cdef void_int str_to_utf8_copy(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_str_to_utf8_copy(struct qdb_pystr_buf *__pyx_v_b, PyObject *__pyx_v_string, struct line_sender_utf8 *__pyx_v_utf8_out) {
  __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_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb._client.str_to_utf8_copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00887:         qdb_pystr_buf* b,
 00888:         PyObject* string,
 00889:         line_sender_utf8* utf8_out) except -1:
 00890:     """
 00891:     Variant of `str_to_utf8` that always copies the string to a new buffer.
 00892: 
 00893:     The resulting `utf8_out` can be used when not holding the GIL:
 00894:     The pointed-to memory is owned by `b`.
 00895:     """
+00896:     if not PyUnicode_CheckExact(string):
  __pyx_t_1 = (!PyUnicode_CheckExact(__pyx_v_string));
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+00897:         raise TypeError(
    __pyx_t_3 = NULL;
+00898:             'Expected a str object, not an object of type ' +
    __pyx_t_5 = __Pyx_PyUnicode_ConcatSafe(__pyx_mstate_global->__pyx_kp_u_Expected_a_str_object_not_an_obj, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 898, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5};
      __pyx_t_2 = __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_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 897, __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(0, 897, __pyx_L1_error)
+00899:             _fqn(type(<str><object>string)))
    __pyx_t_4 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_string))))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 899, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
 00900: 
+00901:     PyUnicode_READY(string)
  __pyx_t_7 = PyUnicode_READY(__pyx_v_string); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 901, __pyx_L1_error)
+00902:     _encode_utf8(b, string, utf8_out)
  __pyx_t_8 = __pyx_f_7questdb_7_client__encode_utf8(__pyx_v_b, __pyx_v_string, __pyx_v_utf8_out); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 902, __pyx_L1_error)
 00903: 
 00904: 
+00905: cdef void_int str_to_table_name(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_str_to_table_name(struct qdb_pystr_buf *__pyx_v_b, PyObject *__pyx_v_string, struct line_sender_table_name *__pyx_v_name_out) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_utf8 __pyx_v_utf8;
  __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_3);
  __Pyx_AddTraceback("questdb._client.str_to_table_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00906:         qdb_pystr_buf* b,
 00907:         PyObject* string,
 00908:         line_sender_table_name* name_out) except -1:
 00909:     """
 00910:     Python string to borrowed C table name.
 00911:     Also see `str_to_utf8`.
 00912:     """
+00913:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 00914:     cdef line_sender_utf8 utf8
+00915:     str_to_utf8(b, string, &utf8)
  __pyx_t_1 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, __pyx_v_string, (&__pyx_v_utf8)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 915, __pyx_L1_error)
+00916:     if not line_sender_table_name_init(name_out, utf8.len, utf8.buf, &err):
  __pyx_t_2 = (!line_sender_table_name_init(__pyx_v_name_out, __pyx_v_utf8.len, __pyx_v_utf8.buf, (&__pyx_v_err)));
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+00917:         raise c_err_to_py(err)
    __pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 917, __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(0, 917, __pyx_L1_error)
 00918: 
 00919: 
+00920: cdef void_int str_to_table_name_copy(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_str_to_table_name_copy(struct qdb_pystr_buf *__pyx_v_b, PyObject *__pyx_v_string, struct line_sender_table_name *__pyx_v_name_out) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_utf8 __pyx_v_utf8;
  __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_3);
  __Pyx_AddTraceback("questdb._client.str_to_table_name_copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00921:         qdb_pystr_buf* b,
 00922:         PyObject* string,
 00923:         line_sender_table_name* name_out) except -1:
 00924:     """
 00925:     Python string to copied C table name.
 00926:     Also see `str_to_utf8_copy`.
 00927:     """
+00928:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 00929:     cdef line_sender_utf8 utf8
+00930:     str_to_utf8_copy(b, string, &utf8)
  __pyx_t_1 = __pyx_f_7questdb_7_client_str_to_utf8_copy(__pyx_v_b, __pyx_v_string, (&__pyx_v_utf8)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 930, __pyx_L1_error)
+00931:     if not line_sender_table_name_init(name_out, utf8.len, utf8.buf, &err):
  __pyx_t_2 = (!line_sender_table_name_init(__pyx_v_name_out, __pyx_v_utf8.len, __pyx_v_utf8.buf, (&__pyx_v_err)));
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+00932:         raise c_err_to_py(err)
    __pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 932, __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(0, 932, __pyx_L1_error)
 00933: 
 00934: 
+00935: cdef void_int str_to_column_name(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_str_to_column_name(struct qdb_pystr_buf *__pyx_v_b, PyObject *__pyx_v_string, struct line_sender_column_name *__pyx_v_name_out) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_utf8 __pyx_v_utf8;
  __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_3);
  __Pyx_AddTraceback("questdb._client.str_to_column_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00936:         qdb_pystr_buf* b,
 00937:         str string,
 00938:         line_sender_column_name* name_out) except -1:
 00939:     """
 00940:     Python string to borrowed C column name.
 00941:     Also see `str_to_utf8`.
 00942:     """
+00943:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 00944:     cdef line_sender_utf8 utf8
+00945:     str_to_utf8(b, <PyObject*>string, &utf8)
  __pyx_t_1 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_string), (&__pyx_v_utf8)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 945, __pyx_L1_error)
+00946:     if not line_sender_column_name_init(name_out, utf8.len, utf8.buf, &err):
  __pyx_t_2 = (!line_sender_column_name_init(__pyx_v_name_out, __pyx_v_utf8.len, __pyx_v_utf8.buf, (&__pyx_v_err)));
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+00947:         raise c_err_to_py(err)
    __pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 947, __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(0, 947, __pyx_L1_error)
 00948: 
 00949: 
+00950: cdef void_int str_to_column_name_copy(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_str_to_column_name_copy(struct qdb_pystr_buf *__pyx_v_b, PyObject *__pyx_v_string, struct line_sender_column_name *__pyx_v_name_out) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_utf8 __pyx_v_utf8;
  __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_3);
  __Pyx_AddTraceback("questdb._client.str_to_column_name_copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00951:         qdb_pystr_buf* b,
 00952:         str string,
 00953:         line_sender_column_name* name_out) except -1:
 00954:     """
 00955:     Python string to copied C column name.
 00956:     Also see `str_to_utf8_copy`.
 00957:     """
+00958:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 00959:     cdef line_sender_utf8 utf8
+00960:     str_to_utf8_copy(b, <PyObject*>string, &utf8)
  __pyx_t_1 = __pyx_f_7questdb_7_client_str_to_utf8_copy(__pyx_v_b, ((PyObject *)__pyx_v_string), (&__pyx_v_utf8)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 960, __pyx_L1_error)
+00961:     if not line_sender_column_name_init(name_out, utf8.len, utf8.buf, &err):
  __pyx_t_2 = (!line_sender_column_name_init(__pyx_v_name_out, __pyx_v_utf8.len, __pyx_v_utf8.buf, (&__pyx_v_err)));
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+00962:         raise c_err_to_py(err)
    __pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 962, __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(0, 962, __pyx_L1_error)
 00963: 
 00964: 
+00965: cdef object _UTC = datetime.timezone.utc
  __Pyx_GetModuleGlobalName(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 965, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_timezone); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 965, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_utc); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 965, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__UTC);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__UTC, __pyx_t_20);
  __Pyx_GIVEREF(__pyx_t_20);
  __pyx_t_20 = 0;
+00966: cdef object _UTC_EPOCH = datetime.datetime(1970, 1, 1, tzinfo=_UTC)
  __Pyx_GetModuleGlobalName(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 966, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 966, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __pyx_t_20 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 966, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_tzinfo, __pyx_v_7questdb_7_client__UTC) < (0)) __PYX_ERR(0, 966, __pyx_L1_error)
  __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_18, __pyx_mstate_global->__pyx_tuple[1], __pyx_t_20); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 966, __pyx_L1_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_XGOTREF(__pyx_v_7questdb_7_client__UTC_EPOCH);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__UTC_EPOCH, __pyx_t_17);
  __Pyx_GIVEREF(__pyx_t_17);
  __pyx_t_17 = 0;
 00967: 
 00968: 
+00969: _NAIVE_DATETIME_WARNED = False
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_NAIVE_DATETIME_WARNED, Py_False) < (0)) __PYX_ERR(0, 969, __pyx_L1_error)
 00970: 
 00971: 
+00972: cdef object _as_utc_aware(cp_datetime dt):
static PyObject *__pyx_f_7questdb_7_client__as_utc_aware(PyDateTime_DateTime *__pyx_v_dt) {
  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_AddTraceback("questdb._client._as_utc_aware", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00973:     global _NAIVE_DATETIME_WARNED
+00974:     if dt.tzinfo is not None:
  __pyx_t_1 = __pyx_f_7cpython_8datetime_8datetime_6tzinfo_tzinfo(__pyx_v_dt); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 974, __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) {
/* … */
  }
+00975:         return dt
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_dt);
    __pyx_r = ((PyObject *)__pyx_v_dt);
    goto __pyx_L0;
+00976:     if dt != dt:
  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_dt), ((PyObject *)__pyx_v_dt), Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 976, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 976, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+00977:         raise ValueError('NaT is not a valid timestamp.')
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_NaT_is_not_a_valid_timestamp};
      __pyx_t_1 = __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;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 977, __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(0, 977, __pyx_L1_error)
+00978:     if not _NAIVE_DATETIME_WARNED:
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_NAIVE_DATETIME_WARNED); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 978, __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(0, 978, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_5 = (!__pyx_t_2);
  if (__pyx_t_5) {
/* … */
  }
+00979:         _NAIVE_DATETIME_WARNED = True
    if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_NAIVE_DATETIME_WARNED, Py_True) < (0)) __PYX_ERR(0, 979, __pyx_L1_error)
 00980:         # cdef frames and this module's def entry points are invisible to
 00981:         # the warnings stack walker, so level 1 is already the user's call.
+00982:         warnings.warn(
    __pyx_t_3 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_warnings); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 982, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_warn); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 982, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 00983:             'Naive datetime interpreted as UTC (questdb 4.x used local '
 00984:             'time). If you meant "now", use TimestampNanos.now() or '
 00985:             'datetime.now(timezone.utc); pass timezone-aware datetimes '
 00986:             'to silence this warning.',
+00987:             UserWarning,
    __pyx_t_4 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_7);
      assert(__pyx_t_3);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
      __pyx_t_4 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Naive_datetime_interpreted_as_UT, ((PyObject *)(((PyTypeObject*)PyExc_UserWarning)))};
      __pyx_t_6 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 982, __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(0, 982, __pyx_L1_error)
      __pyx_t_1 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_6);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 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(0, 982, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 00988:             stacklevel=1)
+00989:     return dt.replace(tzinfo=datetime.timezone.utc)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_7 = ((PyObject *)__pyx_v_dt);
  __Pyx_INCREF(__pyx_t_7);
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 989, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_timezone); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 989, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_utc); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 989, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_7, NULL};
    __pyx_t_3 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 989, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_tzinfo, __pyx_t_6, __pyx_t_3, __pyx_callargs+1, 0) < (0)) __PYX_ERR(0, 989, __pyx_L1_error)
    __pyx_t_1 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_replace, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_3);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 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(0, 989, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 00990: 
 00991: 
+00992: cdef int64_t datetime_to_micros(cp_datetime dt):
static int64_t __pyx_f_7questdb_7_client_datetime_to_micros(PyDateTime_DateTime *__pyx_v_dt) {
  PyObject *__pyx_v_aware = 0;
  PyObject *__pyx_v_delta = 0;
  int64_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client.datetime_to_micros", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1L;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_aware);
  __Pyx_XDECREF(__pyx_v_delta);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 00993:     """
 00994:     Convert a :class:`datetime.datetime` to microseconds since the epoch.
 00995: 
 00996:     Naive datetimes are interpreted as UTC.
 00997:     """
+00998:     cdef object aware = _as_utc_aware(dt)
  __pyx_t_1 = __pyx_f_7questdb_7_client__as_utc_aware(__pyx_v_dt); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 998, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_aware = __pyx_t_1;
  __pyx_t_1 = 0;
+00999:     cdef object delta = aware - _UTC_EPOCH
  __pyx_t_1 = PyNumber_Subtract(__pyx_v_aware, __pyx_v_7questdb_7_client__UTC_EPOCH); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 999, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_delta = __pyx_t_1;
  __pyx_t_1 = 0;
 01000:     return (
+01001:         <int64_t>delta.days * <int64_t>86_400_000_000 +
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_delta, __pyx_mstate_global->__pyx_n_u_days); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1001, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyLong_As_int64_t(__pyx_t_1); if (unlikely((__pyx_t_2 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1001, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+01002:         <int64_t>delta.seconds * <int64_t>1_000_000 +
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_delta, __pyx_mstate_global->__pyx_n_u_seconds); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1002, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyLong_As_int64_t(__pyx_t_1); if (unlikely((__pyx_t_3 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1002, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_r = (((((int64_t)__pyx_t_2) * ((int64_t)0x141DD76000)) + (((int64_t)__pyx_t_3) * ((int64_t)0xF4240))) + ((int64_t)__pyx_t_4));
  goto __pyx_L0;
+01003:         <int64_t>delta.microseconds)
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_delta, __pyx_mstate_global->__pyx_n_u_microseconds); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1003, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyLong_As_int64_t(__pyx_t_1); if (unlikely((__pyx_t_4 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1003, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 01004: 
 01005: 
+01006: cdef int64_t datetime_to_nanos(cp_datetime dt):
static int64_t __pyx_f_7questdb_7_client_datetime_to_nanos(PyDateTime_DateTime *__pyx_v_dt) {
  int64_t __pyx_v_micros;
  int64_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb._client.datetime_to_nanos", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1L;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01007:     """
 01008:     Convert a `datetime.datetime` to nanoseconds since the epoch.
 01009:     """
+01010:     cdef int64_t micros = datetime_to_micros(dt)
  __pyx_t_1 = __pyx_f_7questdb_7_client_datetime_to_micros(__pyx_v_dt); if (unlikely(__pyx_t_1 == ((int64_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 1010, __pyx_L1_error)
  __pyx_v_micros = __pyx_t_1;
 01011:     # INT64_MAX // 1000 == 9_223_372_036_854_775 is the largest microsecond
 01012:     # value whose nanosecond product still fits in an int64.
+01013:     if (micros > <int64_t>9_223_372_036_854_775 or
  __pyx_t_3 = (__pyx_v_micros > ((int64_t)0x20C49BA5E353F7));
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
/* … */
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+01014:             micros < <int64_t>-9_223_372_036_854_775):
  __pyx_t_3 = (__pyx_v_micros < ((int64_t)-9223372036854775L));
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
+01015:         raise ValueError(
    __pyx_t_5 = NULL;
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_datetime_is_out_of_range_for_a_n};
      __pyx_t_4 = __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_4)) __PYX_ERR(0, 1015, __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(0, 1015, __pyx_L1_error)
 01016:             'datetime is out of range for a nanosecond timestamp: '
 01017:             'must be between 1677-09-21T00:12:43.145225Z and '
 01018:             '2262-04-11T23:47:16.854775Z.')
+01019:     return micros * 1000
  __pyx_r = (__pyx_v_micros * 0x3E8);
  goto __pyx_L0;
 01020: 
 01021: 
+01022: class ServerTimestampType:
  __pyx_t_17 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_mstate_global->__pyx_empty_tuple, __pyx_mstate_global->__pyx_n_u_ServerTimestampType, __pyx_mstate_global->__pyx_n_u_ServerTimestampType, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_A_placeholder_value_to_indicate); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1022, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_20 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_mstate_global->__pyx_n_u_ServerTimestampType, __pyx_mstate_global->__pyx_empty_tuple, __pyx_t_17, NULL, 0, 0); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 1022, __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 (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ServerTimestampType, __pyx_t_20) < (0)) __PYX_ERR(0, 1022, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 01023:     """
 01024:     A placeholder value to indicate that the data should be inserted
 01025:     using a server-generated-timestamp.
 01026: 
 01027:     Don't instantiate this class directly, use the singleton
 01028:     :data:`ServerTimestamp` instead.
 01029: 
 01030:     This feature is mostly provided for legacy compatibility.
 01031:     We recommend always specifying an explicit timestamp.
 01032: 
 01033:     Using ``ServerTimestamp`` will prevent QuestDB's deduplication
 01034:     feature from working as it would generate unique rows on resubmission.
 01035:     """
 01036:     pass
 01037: 
 01038: 
 01039: #: Singleton instance used to request server-side timestamping.
 01040: #: See :class:`ServerTimestampType` for more details.
+01041: ServerTimestamp = ServerTimestampType()
  __pyx_t_20 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_ServerTimestampType); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1041, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_20, NULL};
    __pyx_t_17 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_18, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
    __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
    if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1041, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ServerTimestamp, __pyx_t_17) < (0)) __PYX_ERR(0, 1041, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 01042: 
 01043: 
+01044: cdef class TimestampMicros:
struct __pyx_obj_7questdb_7_client_TimestampMicros {
  PyObject_HEAD
  int64_t _value;
};

 01045:     """
 01046:     A timestamp in microseconds since the UNIX epoch (UTC).
 01047: 
 01048:     You may construct a ``TimestampMicros`` from an integer or a
 01049:     ``datetime.datetime``, or simply call the :func:`TimestampMicros.now`
 01050:     method.
 01051: 
 01052:     .. code-block:: python
 01053: 
 01054:         # Recommended way to get the current timestamp.
 01055:         TimestampMicros.now()
 01056: 
 01057:         # The above is equivalent to:
 01058:         TimestampMicros(time.time_ns() // 1000)
 01059: 
 01060:         # You can provide a numeric timestamp too. It can't be negative.
 01061:         TimestampMicros(1657888365426838)
 01062: 
 01063:     ``TimestampMicros`` can also be constructed from a ``datetime.datetime``
 01064:     object.
 01065: 
 01066:     .. code-block:: python
 01067: 
 01068:         TimestampMicros.from_datetime(
 01069:             datetime.datetime.now(tz=datetime.timezone.utc))
 01070: 
 01071:     We recommend that when using ``datetime`` objects, you explicitly pass in
 01072:     the timezone to use. A ``datetime`` object without an associated timezone
 01073:     is interpreted as UTC (a ``UserWarning`` is emitted once per process).
 01074:     Note that ``datetime.datetime.now()`` is your local wall clock: use
 01075:     ``datetime.datetime.now(datetime.timezone.utc)`` or ``now()`` on this
 01076:     class for the current instant.
 01077:     """
 01078:     cdef int64_t _value
 01079: 
+01080:     def __cinit__(self, value):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_15TimestampMicros_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7questdb_7_client_15TimestampMicros_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_value = 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_value,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(0, 1080, __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(0, 1080, __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(0, 1080, __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(0, 1080, __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(0, 1080, __pyx_L3_error)
    }
    __pyx_v_value = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1080, __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.TimestampMicros.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_15TimestampMicros___cinit__(((struct __pyx_obj_7questdb_7_client_TimestampMicros *)__pyx_v_self), __pyx_v_value);
  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_15TimestampMicros___cinit__(struct __pyx_obj_7questdb_7_client_TimestampMicros *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client.TimestampMicros.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+01081:         if value < 0:
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_value, __pyx_mstate_global->__pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1081, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1081, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+01082:             raise ValueError('value must be a non-negative integer.')
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_value_must_be_a_non_negative_int};
      __pyx_t_1 = __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;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1082, __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(0, 1082, __pyx_L1_error)
+01083:         self._value = value
  __pyx_t_5 = __Pyx_PyLong_As_int64_t(__pyx_v_value); if (unlikely((__pyx_t_5 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1083, __pyx_L1_error)
  __pyx_v_self->_value = __pyx_t_5;
 01084: 
+01085:     @classmethod
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_15TimestampMicros_3from_datetime(PyObject *__pyx_v_cls, 
#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_15TimestampMicros_2from_datetime, "\n        Construct a ``TimestampMicros`` from a :class:`datetime.datetime` object.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_15TimestampMicros_3from_datetime = {"from_datetime", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_15TimestampMicros_3from_datetime, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_15TimestampMicros_2from_datetime};
static PyObject *__pyx_pw_7questdb_7_client_15TimestampMicros_3from_datetime(PyObject *__pyx_v_cls, 
#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_dt = 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("from_datetime (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_dt,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(0, 1085, __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(0, 1085, __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, "from_datetime", 0) < (0)) __PYX_ERR(0, 1085, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("from_datetime", 1, 1, 1, i); __PYX_ERR(0, 1085, __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(0, 1085, __pyx_L3_error)
    }
    __pyx_v_dt = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("from_datetime", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1085, __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.TimestampMicros.from_datetime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_15TimestampMicros_2from_datetime(((PyTypeObject*)__pyx_v_cls), __pyx_v_dt);
  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_15TimestampMicros_2from_datetime(PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_dt) {
  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_AddTraceback("questdb._client.TimestampMicros.from_datetime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1085, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_dt, __pyx_mstate_global->__pyx_kp_u_datetime_datetime) < (0)) __PYX_ERR(0, 1085, __pyx_L1_error)
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_15TimestampMicros_3from_datetime, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_TimestampMicros_from_datetime, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[158])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1085, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_18, __pyx_t_17);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros, __pyx_mstate_global->__pyx_n_u_from_datetime, __pyx_t_18) < (0)) __PYX_ERR(0, 1085, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __Pyx_GetNameInClass(__pyx_t_18, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros, __pyx_mstate_global->__pyx_n_u_from_datetime); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1085, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_17 = __Pyx_Method_ClassMethod(__pyx_t_18); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1085, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros, __pyx_mstate_global->__pyx_n_u_from_datetime, __pyx_t_17) < (0)) __PYX_ERR(0, 1085, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 01086:     def from_datetime(cls, dt: datetime.datetime):
 01087:         """
 01088:         Construct a ``TimestampMicros`` from a :class:`datetime.datetime` object.
 01089:         """
+01090:         if not isinstance(dt, cp_datetime):
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_dt, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime); 
  __pyx_t_2 = (!__pyx_t_1);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+01091:             raise TypeError('dt must be a datetime object.')
    __pyx_t_4 = NULL;
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_dt_must_be_a_datetime_object};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __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(0, 1091, __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(0, 1091, __pyx_L1_error)
+01092:         return cls(datetime_to_micros(dt))
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = NULL;
  if (!(likely(((__pyx_v_dt) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_dt, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime))))) __PYX_ERR(0, 1092, __pyx_L1_error)
  __pyx_t_6 = __pyx_f_7questdb_7_client_datetime_to_micros(((PyDateTime_DateTime *)__pyx_v_dt)); if (unlikely(__pyx_t_6 == ((int64_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 1092, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyLong_From_int64_t(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1092, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7};
    __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_v_cls, __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_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1092, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 01093: 
+01094:     @classmethod
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_15TimestampMicros_5now(PyObject *__pyx_v_cls, 
#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_15TimestampMicros_4now, "\n        Construct a ``TimestampMicros`` from the current time as UTC.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_15TimestampMicros_5now = {"now", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_15TimestampMicros_5now, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_15TimestampMicros_4now};
static PyObject *__pyx_pw_7questdb_7_client_15TimestampMicros_5now(PyObject *__pyx_v_cls, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #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("now (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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("now", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("now", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_15TimestampMicros_4now(((PyTypeObject*)__pyx_v_cls));

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

static PyObject *__pyx_pf_7questdb_7_client_15TimestampMicros_4now(PyTypeObject *__pyx_v_cls) {
  int64_t __pyx_v_value;
  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.TimestampMicros.now", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_15TimestampMicros_5now, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_TimestampMicros_now, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[159])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1094, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros, __pyx_mstate_global->__pyx_n_u_now, __pyx_t_17) < (0)) __PYX_ERR(0, 1094, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __Pyx_GetNameInClass(__pyx_t_17, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros, __pyx_mstate_global->__pyx_n_u_now); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1094, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_18 = __Pyx_Method_ClassMethod(__pyx_t_17); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1094, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros, __pyx_mstate_global->__pyx_n_u_now, __pyx_t_18) < (0)) __PYX_ERR(0, 1094, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 01095:     def now(cls):
 01096:         """
 01097:         Construct a ``TimestampMicros`` from the current time as UTC.
 01098:         """
+01099:         cdef int64_t value = line_sender_now_micros()
  __pyx_v_value = line_sender_now_micros();
+01100:         return cls(value)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = NULL;
  __pyx_t_3 = __Pyx_PyLong_From_int64_t(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_v_cls, __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_1)) __PYX_ERR(0, 1100, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 01101: 
+01102:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_15TimestampMicros_5value_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_15TimestampMicros_5value_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_15TimestampMicros_5value___get__(((struct __pyx_obj_7questdb_7_client_TimestampMicros *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_15TimestampMicros_5value___get__(struct __pyx_obj_7questdb_7_client_TimestampMicros *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client.TimestampMicros.value.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01103:     def value(self) -> int:
 01104:         """Number of microseconds (Unix epoch timestamp, UTC)."""
+01105:         return self._value
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_int64_t(__pyx_v_self->_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1105, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 01106: 
+01107:     def __repr__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_15TimestampMicros_7__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_15TimestampMicros_7__repr__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_15TimestampMicros_6__repr__(((struct __pyx_obj_7questdb_7_client_TimestampMicros *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_15TimestampMicros_6__repr__(struct __pyx_obj_7questdb_7_client_TimestampMicros *__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.TimestampMicros.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+01108:         return f'TimestampMicros({self._value})'
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyUnicode_From_int64_t(__pyx_v_self->_value, 0, ' ', 'd'); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2[0] = __pyx_mstate_global->__pyx_kp_u_TimestampMicros;
  __pyx_t_2[1] = __pyx_t_1;
  __pyx_t_2[2] = __pyx_mstate_global->__pyx_kp_u__5;
  __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, 16 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1) + 1, 127);
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1108, __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;
 01109: 
 01110: 
+01111: cdef class TimestampNanos:
struct __pyx_obj_7questdb_7_client_TimestampNanos {
  PyObject_HEAD
  int64_t _value;
};

 01112:     """
 01113:     A timestamp in nanoseconds since the UNIX epoch (UTC).
 01114: 
 01115:     You may construct a ``TimestampNanos`` from an integer or a
 01116:     ``datetime.datetime``, or simply call the :func:`TimestampNanos.now`
 01117:     method.
 01118: 
 01119:     .. code-block:: python
 01120: 
 01121:         # Recommended way to get the current timestamp.
 01122:         TimestampNanos.now()
 01123: 
 01124:         # The above is equivalent to:
 01125:         TimestampNanos(time.time_ns())
 01126: 
 01127:         # You can provide a numeric timestamp too. It can't be negative.
 01128:         TimestampNanos(1657888365426838016)
 01129: 
 01130:     ``TimestampNanos`` can also be constructed from a ``datetime`` object.
 01131: 
 01132:     .. code-block:: python
 01133: 
 01134:         TimestampNanos.from_datetime(
 01135:             datetime.datetime.now(tz=datetime.timezone.utc))
 01136: 
 01137:     We recommend that when using ``datetime`` objects, you explicitly pass in
 01138:     the timezone to use. A ``datetime`` object without an associated timezone
 01139:     is interpreted as UTC (a ``UserWarning`` is emitted once per process).
 01140:     Note that ``datetime.datetime.now()`` is your local wall clock: use
 01141:     ``datetime.datetime.now(datetime.timezone.utc)`` or ``now()`` on this
 01142:     class for the current instant.
 01143:     """
 01144:     cdef int64_t _value
 01145: 
+01146:     def __cinit__(self, value):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_14TimestampNanos_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7questdb_7_client_14TimestampNanos_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_value = 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_value,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(0, 1146, __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(0, 1146, __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(0, 1146, __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(0, 1146, __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(0, 1146, __pyx_L3_error)
    }
    __pyx_v_value = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1146, __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.TimestampNanos.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_14TimestampNanos___cinit__(((struct __pyx_obj_7questdb_7_client_TimestampNanos *)__pyx_v_self), __pyx_v_value);
  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_14TimestampNanos___cinit__(struct __pyx_obj_7questdb_7_client_TimestampNanos *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client.TimestampNanos.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+01147:         if value < 0:
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_value, __pyx_mstate_global->__pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1147, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1147, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+01148:             raise ValueError('value must be a non-negative integer.')
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_value_must_be_a_non_negative_int};
      __pyx_t_1 = __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;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1148, __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(0, 1148, __pyx_L1_error)
+01149:         self._value = value
  __pyx_t_5 = __Pyx_PyLong_As_int64_t(__pyx_v_value); if (unlikely((__pyx_t_5 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1149, __pyx_L1_error)
  __pyx_v_self->_value = __pyx_t_5;
 01150: 
+01151:     @classmethod
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_14TimestampNanos_3from_datetime(PyObject *__pyx_v_cls, 
#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_14TimestampNanos_2from_datetime, "\n        Construct a ``TimestampNanos`` from a ``datetime.datetime`` object.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_14TimestampNanos_3from_datetime = {"from_datetime", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_14TimestampNanos_3from_datetime, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_14TimestampNanos_2from_datetime};
static PyObject *__pyx_pw_7questdb_7_client_14TimestampNanos_3from_datetime(PyObject *__pyx_v_cls, 
#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_dt = 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("from_datetime (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_dt,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(0, 1151, __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(0, 1151, __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, "from_datetime", 0) < (0)) __PYX_ERR(0, 1151, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("from_datetime", 1, 1, 1, i); __PYX_ERR(0, 1151, __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(0, 1151, __pyx_L3_error)
    }
    __pyx_v_dt = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("from_datetime", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1151, __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.TimestampNanos.from_datetime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_14TimestampNanos_2from_datetime(((PyTypeObject*)__pyx_v_cls), __pyx_v_dt);
  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_14TimestampNanos_2from_datetime(PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_dt) {
  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_AddTraceback("questdb._client.TimestampNanos.from_datetime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_dt, __pyx_mstate_global->__pyx_kp_u_datetime_datetime) < (0)) __PYX_ERR(0, 1151, __pyx_L1_error)
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_14TimestampNanos_3from_datetime, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_TimestampNanos_from_datetime, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[162])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_17, __pyx_t_18);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos, __pyx_mstate_global->__pyx_n_u_from_datetime, __pyx_t_17) < (0)) __PYX_ERR(0, 1151, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __Pyx_GetNameInClass(__pyx_t_17, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos, __pyx_mstate_global->__pyx_n_u_from_datetime); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_18 = __Pyx_Method_ClassMethod(__pyx_t_17); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos, __pyx_mstate_global->__pyx_n_u_from_datetime, __pyx_t_18) < (0)) __PYX_ERR(0, 1151, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 01152:     def from_datetime(cls, dt: datetime.datetime):
 01153:         """
 01154:         Construct a ``TimestampNanos`` from a ``datetime.datetime`` object.
 01155:         """
+01156:         if not isinstance(dt, cp_datetime):
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_dt, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime); 
  __pyx_t_2 = (!__pyx_t_1);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+01157:             raise TypeError('dt must be a datetime object.')
    __pyx_t_4 = NULL;
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_dt_must_be_a_datetime_object};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __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(0, 1157, __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(0, 1157, __pyx_L1_error)
+01158:         return cls(datetime_to_nanos(dt))
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = NULL;
  if (!(likely(((__pyx_v_dt) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_dt, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime))))) __PYX_ERR(0, 1158, __pyx_L1_error)
  __pyx_t_6 = __pyx_f_7questdb_7_client_datetime_to_nanos(((PyDateTime_DateTime *)__pyx_v_dt)); if (unlikely(__pyx_t_6 == ((int64_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 1158, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyLong_From_int64_t(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1158, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7};
    __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_v_cls, __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_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1158, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 01159: 
+01160:     @classmethod
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_14TimestampNanos_5now(PyObject *__pyx_v_cls, 
#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_14TimestampNanos_4now, "\n        Construct a ``TimestampNanos`` from the current time as UTC.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_14TimestampNanos_5now = {"now", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_14TimestampNanos_5now, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_14TimestampNanos_4now};
static PyObject *__pyx_pw_7questdb_7_client_14TimestampNanos_5now(PyObject *__pyx_v_cls, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #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("now (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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("now", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("now", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_14TimestampNanos_4now(((PyTypeObject*)__pyx_v_cls));

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

static PyObject *__pyx_pf_7questdb_7_client_14TimestampNanos_4now(PyTypeObject *__pyx_v_cls) {
  int64_t __pyx_v_value;
  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.TimestampNanos.now", __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_14TimestampNanos_5now, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_TimestampNanos_now, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[163])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1160, __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_TimestampNanos, __pyx_mstate_global->__pyx_n_u_now, __pyx_t_18) < (0)) __PYX_ERR(0, 1160, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __Pyx_GetNameInClass(__pyx_t_18, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos, __pyx_mstate_global->__pyx_n_u_now); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1160, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_17 = __Pyx_Method_ClassMethod(__pyx_t_18); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1160, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos, __pyx_mstate_global->__pyx_n_u_now, __pyx_t_17) < (0)) __PYX_ERR(0, 1160, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 01161:     def now(cls):
 01162:         """
 01163:         Construct a ``TimestampNanos`` from the current time as UTC.
 01164:         """
+01165:         cdef int64_t value = line_sender_now_nanos()
  __pyx_v_value = line_sender_now_nanos();
+01166:         return cls(value)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = NULL;
  __pyx_t_3 = __Pyx_PyLong_From_int64_t(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1166, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_v_cls, __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_1)) __PYX_ERR(0, 1166, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 01167: 
+01168:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_14TimestampNanos_5value_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_14TimestampNanos_5value_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_14TimestampNanos_5value___get__(((struct __pyx_obj_7questdb_7_client_TimestampNanos *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_14TimestampNanos_5value___get__(struct __pyx_obj_7questdb_7_client_TimestampNanos *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client.TimestampNanos.value.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01169:     def value(self) -> int:
 01170:         """Number of nanoseconds (Unix epoch timestamp, UTC)."""
+01171:         return self._value
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_int64_t(__pyx_v_self->_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1171, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 01172: 
+01173:     def __repr__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_14TimestampNanos_7__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_14TimestampNanos_7__repr__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_14TimestampNanos_6__repr__(((struct __pyx_obj_7questdb_7_client_TimestampNanos *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_14TimestampNanos_6__repr__(struct __pyx_obj_7questdb_7_client_TimestampNanos *__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.TimestampNanos.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+01174:         return f'TimestampNanos({self.value})'
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1174, __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(0, 1174, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3[0] = __pyx_mstate_global->__pyx_kp_u_TimestampNanos;
  __pyx_t_3[1] = __pyx_t_2;
  __pyx_t_3[2] = __pyx_mstate_global->__pyx_kp_u__5;
  __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, 15 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2));
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1174, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 01175: 
 01176: 
+01177: cdef class Char:
struct __pyx_obj_7questdb_7_client_Char {
  PyObject_HEAD
  uint16_t _value;
};

 01178:     """A QuestDB CHAR value stored as one UTF-16 code unit.
 01179: 
 01180:     ``'\\x00'`` is stored as code unit 0. CHAR has no physical ``NULL``
 01181:     representation: QWP/Arrow egress returns it as 0, while text output
 01182:     renders it as empty. Some QuestDB SQL operations treat code unit 0 as
 01183:     CHAR's null/absent marker.
 01184:     """
 01185:     cdef uint16_t _value
 01186: 
+01187:     def __cinit__(self, value):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_4Char_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7questdb_7_client_4Char_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_value = 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_value,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(0, 1187, __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(0, 1187, __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(0, 1187, __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(0, 1187, __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(0, 1187, __pyx_L3_error)
    }
    __pyx_v_value = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1187, __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.Char.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_4Char___cinit__(((struct __pyx_obj_7questdb_7_client_Char *)__pyx_v_self), __pyx_v_value);
  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_4Char___cinit__(struct __pyx_obj_7questdb_7_client_Char *__pyx_v_self, PyObject *__pyx_v_value) {
  long __pyx_v_code_point;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client.Char.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+01188:         if not isinstance(value, str):
  __pyx_t_1 = PyUnicode_Check(__pyx_v_value); 
  __pyx_t_2 = (!__pyx_t_1);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+01189:             raise TypeError('value must be a str.')
    __pyx_t_4 = NULL;
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_value_must_be_a_str};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __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(0, 1189, __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(0, 1189, __pyx_L1_error)
+01190:         if len(value) != 1:
  __pyx_t_6 = PyObject_Length(__pyx_v_value); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1190, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_6 != 1);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+01191:             raise ValueError('value must contain exactly one code point.')
    __pyx_t_4 = NULL;
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_value_must_contain_exactly_one_c};
      __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(0, 1191, __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(0, 1191, __pyx_L1_error)
+01192:         code_point = ord(value)
  __pyx_t_7 = __Pyx_PyObject_Ord(__pyx_v_value); if (unlikely(__pyx_t_7 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 1192, __pyx_L1_error)
  __pyx_v_code_point = __pyx_t_7;
+01193:         if code_point > 0xFFFF:
  __pyx_t_2 = (__pyx_v_code_point > 0xFFFF);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+01194:             raise ValueError(
    __pyx_t_4 = NULL;
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_a_supplementary_character_needs};
      __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(0, 1194, __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(0, 1194, __pyx_L1_error)
 01195:                 'a supplementary character needs a surrogate pair and '
 01196:                 'cannot fit CHAR; use str/VARCHAR instead.')
+01197:         self._value = <uint16_t>code_point
  __pyx_v_self->_value = ((uint16_t)__pyx_v_code_point);
 01198: 
+01199:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_4Char_5value_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_4Char_5value_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_4Char_5value___get__(((struct __pyx_obj_7questdb_7_client_Char *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_4Char_5value___get__(struct __pyx_obj_7questdb_7_client_Char *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client.Char.value.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01200:     def value(self) -> str:
 01201:         """The single Python code point represented by this CHAR."""
+01202:         return chr(self._value)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyUnicode_FromOrdinal(__pyx_v_self->_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 01203: 
+01204:     def __repr__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_4Char_3__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_4Char_3__repr__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_4Char_2__repr__(((struct __pyx_obj_7questdb_7_client_Char *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_4Char_2__repr__(struct __pyx_obj_7questdb_7_client_Char *__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.Char.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+01205:         return f'Char({self.value!r})'
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1205, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_t_1), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1205, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3[0] = __pyx_mstate_global->__pyx_kp_u_Char;
  __pyx_t_3[1] = __pyx_t_2;
  __pyx_t_3[2] = __pyx_mstate_global->__pyx_kp_u__5;
  __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, 5 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2));
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1205, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 01206: 
 01207: 
+01208: cdef class DateMillis:
struct __pyx_obj_7questdb_7_client_DateMillis {
  PyObject_HEAD
  int64_t _value;
};

 01209:     """A QuestDB DATE value in milliseconds since the Unix epoch (UTC).
 01210: 
 01211:     QuestDB DATE is a millisecond timestamp, not a civil date. The full signed
 01212:     64-bit range is accepted, including pre-epoch values. ``INT64_MIN`` is
 01213:     accepted but reads back from QuestDB as ``NULL``.
 01214: 
 01215:     This is how :func:`Buffer.row <questdb.ingress.Buffer.row>` writes a
 01216:     DATE column. DataFrames claim DATE from the column's Arrow type
 01217:     instead — ``pa.timestamp('ms')`` (naive or tz-aware),
 01218:     ``pa.date32()``, or ``pa.date64()`` — so there is no DATE cell type
 01219:     and no ``'date'`` kind for ``schema_overrides``. A NumPy
 01220:     ``datetime64[ms]`` dtype has no route of its own to DATE and widens
 01221:     to a microsecond TIMESTAMP, unless the frame carries a
 01222:     ``df.attrs['questdb']`` claim naming the column DATE, which puts the
 01223:     Arrow type back on it first. That claim is written as
 01224:     ``{'kind': 'date'}`` under the column's entry in the version-1 claim
 01225:     mapping. Like the other QWP-only types, DATE needs a QWP sender; ILP
 01226:     senders have no DATE type, so the datetime columns they accept all
 01227:     land as TIMESTAMP.
 01228:     """
 01229:     cdef int64_t _value
 01230: 
+01231:     def __cinit__(self, millis):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_10DateMillis_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7questdb_7_client_10DateMillis_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_millis = 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_millis,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(0, 1231, __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(0, 1231, __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(0, 1231, __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(0, 1231, __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(0, 1231, __pyx_L3_error)
    }
    __pyx_v_millis = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1231, __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.DateMillis.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_10DateMillis___cinit__(((struct __pyx_obj_7questdb_7_client_DateMillis *)__pyx_v_self), __pyx_v_millis);
  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_10DateMillis___cinit__(struct __pyx_obj_7questdb_7_client_DateMillis *__pyx_v_self, PyObject *__pyx_v_millis) {
  int __pyx_r;
  __Pyx_INCREF(__pyx_v_millis);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client.DateMillis.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_millis);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+01232:         if not _is_integral_not_bool(millis):
  __pyx_t_1 = __pyx_f_7questdb_7_client__is_integral_not_bool(__pyx_v_millis); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1232, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+01233:             raise TypeError('millis must be a whole number.')
    __pyx_t_4 = NULL;
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_millis_must_be_a_whole_number};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __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(0, 1233, __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(0, 1233, __pyx_L1_error)
+01234:         millis = int(millis)
  __pyx_t_3 = __Pyx_PyNumber_Int(__pyx_v_millis); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1234, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF_SET(__pyx_v_millis, __pyx_t_3);
  __pyx_t_3 = 0;
+01235:         if millis < INT64_MIN or millis > INT64_MAX:
  __pyx_t_3 = __Pyx_PyLong_From_int64_t(INT64_MIN); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1235, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyObject_RichCompare(__pyx_v_millis, __pyx_t_3, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1235, __pyx_L1_error)
  __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(0, 1235, __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_L5_bool_binop_done;
  }
  __pyx_t_4 = __Pyx_PyLong_From_int64_t(INT64_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1235, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_millis, __pyx_t_4, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1235, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1235, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_2 = __pyx_t_1;
  __pyx_L5_bool_binop_done:;
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+01236:             raise ValueError('millis must fit in a signed 64-bit integer.')
    __pyx_t_4 = NULL;
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_millis_must_fit_in_a_signed_64_b};
      __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(0, 1236, __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(0, 1236, __pyx_L1_error)
+01237:         self._value = <int64_t>millis
  __pyx_t_6 = __Pyx_PyLong_As_int64_t(__pyx_v_millis); if (unlikely((__pyx_t_6 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1237, __pyx_L1_error)
  __pyx_v_self->_value = ((int64_t)__pyx_t_6);
 01238: 
+01239:     @classmethod
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_10DateMillis_3from_datetime(PyObject *__pyx_v_cls, 
#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_10DateMillis_2from_datetime, "Construct a ``DateMillis`` by flooring a datetime to milliseconds.");
static PyMethodDef __pyx_mdef_7questdb_7_client_10DateMillis_3from_datetime = {"from_datetime", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_10DateMillis_3from_datetime, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_10DateMillis_2from_datetime};
static PyObject *__pyx_pw_7questdb_7_client_10DateMillis_3from_datetime(PyObject *__pyx_v_cls, 
#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_dt = 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("from_datetime (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_dt,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(0, 1239, __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(0, 1239, __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, "from_datetime", 0) < (0)) __PYX_ERR(0, 1239, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("from_datetime", 1, 1, 1, i); __PYX_ERR(0, 1239, __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(0, 1239, __pyx_L3_error)
    }
    __pyx_v_dt = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("from_datetime", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1239, __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.DateMillis.from_datetime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_10DateMillis_2from_datetime(((PyTypeObject*)__pyx_v_cls), __pyx_v_dt);
  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_10DateMillis_2from_datetime(PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_dt) {
  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_AddTraceback("questdb._client.DateMillis.from_datetime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1239, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_dt, __pyx_mstate_global->__pyx_kp_u_datetime_datetime) < (0)) __PYX_ERR(0, 1239, __pyx_L1_error)
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_10DateMillis_3from_datetime, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DateMillis_from_datetime, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[168])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1239, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_18, __pyx_t_17);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_DateMillis, __pyx_mstate_global->__pyx_n_u_from_datetime, __pyx_t_18) < (0)) __PYX_ERR(0, 1239, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __Pyx_GetNameInClass(__pyx_t_18, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_DateMillis, __pyx_mstate_global->__pyx_n_u_from_datetime); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1239, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_17 = __Pyx_Method_ClassMethod(__pyx_t_18); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1239, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_DateMillis, __pyx_mstate_global->__pyx_n_u_from_datetime, __pyx_t_17) < (0)) __PYX_ERR(0, 1239, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 01240:     def from_datetime(cls, dt: datetime.datetime):
 01241:         """Construct a ``DateMillis`` by flooring a datetime to milliseconds."""
+01242:         if not isinstance(dt, cp_datetime):
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_dt, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime); 
  __pyx_t_2 = (!__pyx_t_1);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+01243:             raise TypeError('dt must be a datetime object.')
    __pyx_t_4 = NULL;
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_dt_must_be_a_datetime_object};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __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(0, 1243, __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(0, 1243, __pyx_L1_error)
+01244:         return cls(datetime_to_micros(dt) // 1000)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = NULL;
  if (!(likely(((__pyx_v_dt) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_dt, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime))))) __PYX_ERR(0, 1244, __pyx_L1_error)
  __pyx_t_6 = __pyx_f_7questdb_7_client_datetime_to_micros(((PyDateTime_DateTime *)__pyx_v_dt)); if (unlikely(__pyx_t_6 == ((int64_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 1244, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyLong_From_int64_t(__Pyx_div_int64_t(__pyx_t_6, 0x3E8, 1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1244, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7};
    __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_v_cls, __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_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1244, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 01245: 
+01246:     @classmethod
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_10DateMillis_5now(PyObject *__pyx_v_cls, 
#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_10DateMillis_4now, "Construct a ``DateMillis`` from the current time as UTC.");
static PyMethodDef __pyx_mdef_7questdb_7_client_10DateMillis_5now = {"now", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_10DateMillis_5now, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_10DateMillis_4now};
static PyObject *__pyx_pw_7questdb_7_client_10DateMillis_5now(PyObject *__pyx_v_cls, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #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("now (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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("now", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("now", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_10DateMillis_4now(((PyTypeObject*)__pyx_v_cls));

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

static PyObject *__pyx_pf_7questdb_7_client_10DateMillis_4now(PyTypeObject *__pyx_v_cls) {
  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.DateMillis.now", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_10DateMillis_5now, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DateMillis_now, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[169])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1246, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_DateMillis, __pyx_mstate_global->__pyx_n_u_now, __pyx_t_17) < (0)) __PYX_ERR(0, 1246, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __Pyx_GetNameInClass(__pyx_t_17, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_DateMillis, __pyx_mstate_global->__pyx_n_u_now); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1246, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_18 = __Pyx_Method_ClassMethod(__pyx_t_17); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1246, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_DateMillis, __pyx_mstate_global->__pyx_n_u_now, __pyx_t_18) < (0)) __PYX_ERR(0, 1246, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 01247:     def now(cls):
 01248:         """Construct a ``DateMillis`` from the current time as UTC."""
+01249:         return cls(line_sender_now_micros() // 1000)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = NULL;
  __pyx_t_3 = __Pyx_PyLong_From_int64_t(__Pyx_div_int64_t(line_sender_now_micros(), 0x3E8, 1)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1249, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_v_cls, __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_1)) __PYX_ERR(0, 1249, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 01250: 
+01251:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_10DateMillis_5value_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_10DateMillis_5value_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_10DateMillis_5value___get__(((struct __pyx_obj_7questdb_7_client_DateMillis *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_10DateMillis_5value___get__(struct __pyx_obj_7questdb_7_client_DateMillis *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client.DateMillis.value.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01252:     def value(self) -> int:
 01253:         """Milliseconds since the Unix epoch (UTC)."""
+01254:         return self._value
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_int64_t(__pyx_v_self->_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1254, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 01255: 
+01256:     def __repr__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_10DateMillis_7__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_10DateMillis_7__repr__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_10DateMillis_6__repr__(((struct __pyx_obj_7questdb_7_client_DateMillis *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_10DateMillis_6__repr__(struct __pyx_obj_7questdb_7_client_DateMillis *__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.DateMillis.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+01257:         return f'DateMillis({self._value})'
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyUnicode_From_int64_t(__pyx_v_self->_value, 0, ' ', 'd'); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1257, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2[0] = __pyx_mstate_global->__pyx_kp_u_DateMillis;
  __pyx_t_2[1] = __pyx_t_1;
  __pyx_t_2[2] = __pyx_mstate_global->__pyx_kp_u__5;
  __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1) + 1, 127);
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1257, __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;
 01258: 
 01259: 
+01260: cdef class Long256:
struct __pyx_obj_7questdb_7_client_Long256 {
  PyObject_HEAD
  PyObject *_bytes;
};

 01261:     """An unsigned 256-bit integer for a QuestDB LONG256 column.
 01262: 
 01263:     The value whose four 64-bit limbs are all ``0x8000000000000000`` is
 01264:     accepted but reads back from QuestDB as ``NULL``.
 01265:     """
 01266:     cdef bytes _bytes
 01267: 
+01268:     def __cinit__(self, value):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_7Long256_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7questdb_7_client_7Long256_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_value = 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_value,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(0, 1268, __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(0, 1268, __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(0, 1268, __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(0, 1268, __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(0, 1268, __pyx_L3_error)
    }
    __pyx_v_value = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1268, __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.Long256.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_7Long256___cinit__(((struct __pyx_obj_7questdb_7_client_Long256 *)__pyx_v_self), __pyx_v_value);
  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_7Long256___cinit__(struct __pyx_obj_7questdb_7_client_Long256 *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_INCREF(__pyx_v_value);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client.Long256.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_value);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+01269:         if not _is_integral_not_bool(value):
  __pyx_t_1 = __pyx_f_7questdb_7_client__is_integral_not_bool(__pyx_v_value); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1269, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+01270:             raise TypeError('value must be a whole number.')
    __pyx_t_4 = NULL;
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_value_must_be_a_whole_number};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __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(0, 1270, __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(0, 1270, __pyx_L1_error)
+01271:         value = int(value)
  __pyx_t_3 = __Pyx_PyNumber_Int(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1271, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_3);
  __pyx_t_3 = 0;
+01272:         if value < 0 or value >= (1 << 256):
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_value, __pyx_mstate_global->__pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1272, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1272, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!__pyx_t_1) {
  } else {
    __pyx_t_2 = __pyx_t_1;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_value, __pyx_mstate_global->__pyx_int_large_0x1000000000000000_xxx_000000000000000000, Py_GE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1272, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1272, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_2 = __pyx_t_1;
  __pyx_L5_bool_binop_done:;
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+01273:             raise ValueError('value must be in the range 0 <= value < 2**256.')
    __pyx_t_4 = NULL;
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_value_must_be_in_the_range_0_val};
      __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(0, 1273, __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(0, 1273, __pyx_L1_error)
 01274:         # The column write reads exactly 32 bytes from the pointer. The
 01275:         # unbound `int.to_bytes` keeps a subclass override out of the way,
 01276:         # so the result is always a `bytes` of exactly that width.
+01277:         self._bytes = int.to_bytes(value, 32, 'little')
  __pyx_t_4 = ((PyObject *)(&PyLong_Type));
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[4] = {__pyx_t_4, __pyx_v_value, __pyx_mstate_global->__pyx_int_32, __pyx_mstate_global->__pyx_n_u_little};
    __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_to_bytes, __pyx_callargs+__pyx_t_5, (4-__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(0, 1277, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  if (!(likely(PyBytes_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_3))) __PYX_ERR(0, 1277, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->_bytes);
  __Pyx_DECREF(__pyx_v_self->_bytes);
  __pyx_v_self->_bytes = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
 01278: 
+01279:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7Long256_5value_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_7Long256_5value_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_7Long256_5value___get__(((struct __pyx_obj_7questdb_7_client_Long256 *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_7Long256_5value___get__(struct __pyx_obj_7questdb_7_client_Long256 *__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.Long256.value.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01280:     def value(self) -> int:
 01281:         """The unsigned integer value."""
+01282:         return int.from_bytes(self._bytes, 'little')
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = ((PyObject *)(&PyLong_Type));
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_v_self->_bytes, __pyx_mstate_global->__pyx_n_u_little};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_bytes, __pyx_callargs+__pyx_t_3, (3-__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(0, 1282, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 01283: 
+01284:     def __repr__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7Long256_3__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_7Long256_3__repr__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_7Long256_2__repr__(((struct __pyx_obj_7questdb_7_client_Long256 *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_7Long256_2__repr__(struct __pyx_obj_7questdb_7_client_Long256 *__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.Long256.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+01285:         return f'Long256({self.value})'
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1285, __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(0, 1285, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3[0] = __pyx_mstate_global->__pyx_kp_u_Long256;
  __pyx_t_3[1] = __pyx_t_2;
  __pyx_t_3[2] = __pyx_mstate_global->__pyx_kp_u__5;
  __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, 8 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2));
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1285, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 01286: 
 01287: 
+01288: cdef class Geohash:
struct __pyx_obj_7questdb_7_client_Geohash {
  PyObject_HEAD
  uint64_t _bits;
  uint8_t _precision;
};

 01289:     """A QuestDB GEOHASH value represented by bits and precision.
 01290: 
 01291:     This scalar wrapper is strict: ``precision`` must be in ``1..=60``
 01292:     and ``bits`` must satisfy ``0 <= bits < 2**precision``. Bulk
 01293:     GEOHASH columns, whether NumPy, Arrow or object, deliberately have
 01294:     a different, unchecked value contract; see
 01295:     :meth:`QuestDB.dataframe <questdb.QuestDB.dataframe>`.
 01296: 
 01297:     Precision is pinned per column within one buffer's worth of rows.
 01298:     The first GEOHASH cell written to a column fixes the precision for
 01299:     the rest of that batch, and a later cell at a different precision
 01300:     is rejected by :func:`Buffer.row <questdb.ingress.Buffer.row>`
 01301:     itself, with the buffer rewound to what it held before that row --
 01302:     the bad row is not left waiting for a flush.
 01303: 
 01304:     The pin goes with the buffer: a flush clears it and the next batch
 01305:     starts over. A precision the server's column does not have is
 01306:     therefore the server's to reject, at flush time.
 01307:     """
 01308:     cdef uint64_t _bits
 01309:     cdef uint8_t _precision
 01310: 
+01311:     def __cinit__(self, bits, precision):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_7Geohash_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7questdb_7_client_7Geohash_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_bits = 0;
  PyObject *__pyx_v_precision = 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_bits_3,&__pyx_mstate_global->__pyx_n_u_precision,0};
  PyObject* values[2] = {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(0, 1311, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_VARARGS(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1311, __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(0, 1311, __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(0, 1311, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, i); __PYX_ERR(0, 1311, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1311, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_VARARGS(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1311, __pyx_L3_error)
    }
    __pyx_v_bits = values[0];
    __pyx_v_precision = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1311, __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.Geohash.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_7Geohash___cinit__(((struct __pyx_obj_7questdb_7_client_Geohash *)__pyx_v_self), __pyx_v_bits, __pyx_v_precision);
  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_7Geohash___cinit__(struct __pyx_obj_7questdb_7_client_Geohash *__pyx_v_self, PyObject *__pyx_v_bits, PyObject *__pyx_v_precision) {
  int __pyx_r;
  __Pyx_INCREF(__pyx_v_bits);
  __Pyx_INCREF(__pyx_v_precision);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client.Geohash.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_bits);
  __Pyx_XDECREF(__pyx_v_precision);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+01312:         if not _is_integral_not_bool(bits):
  __pyx_t_1 = __pyx_f_7questdb_7_client__is_integral_not_bool(__pyx_v_bits); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1312, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+01313:             raise TypeError('bits must be a whole number.')
    __pyx_t_4 = NULL;
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_bits_must_be_a_whole_number};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __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(0, 1313, __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(0, 1313, __pyx_L1_error)
+01314:         if not _is_integral_not_bool(precision):
  __pyx_t_2 = __pyx_f_7questdb_7_client__is_integral_not_bool(__pyx_v_precision); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1314, __pyx_L1_error)
  __pyx_t_1 = (!__pyx_t_2);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+01315:             raise TypeError('precision must be a whole number.')
    __pyx_t_4 = NULL;
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_precision_must_be_a_whole_number};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __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(0, 1315, __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(0, 1315, __pyx_L1_error)
+01316:         bits = int(bits)
  __pyx_t_3 = __Pyx_PyNumber_Int(__pyx_v_bits); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1316, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF_SET(__pyx_v_bits, __pyx_t_3);
  __pyx_t_3 = 0;
+01317:         precision = int(precision)
  __pyx_t_3 = __Pyx_PyNumber_Int(__pyx_v_precision); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1317, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF_SET(__pyx_v_precision, __pyx_t_3);
  __pyx_t_3 = 0;
+01318:         if precision < 1 or precision > 60:
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_precision, __pyx_mstate_global->__pyx_int_1, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1318, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1318, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_precision, __pyx_mstate_global->__pyx_int_60, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1318, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1318, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_1 = __pyx_t_2;
  __pyx_L6_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+01319:             raise ValueError('precision must be in the range 1..60.')
    __pyx_t_4 = NULL;
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_precision_must_be_in_the_range_1};
      __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(0, 1319, __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(0, 1319, __pyx_L1_error)
+01320:         if bits < 0 or bits >= (1 << precision):
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_bits, __pyx_mstate_global->__pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1320, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1320, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L9_bool_binop_done;
  }
  __pyx_t_3 = PyNumber_Lshift(__pyx_mstate_global->__pyx_int_1, __pyx_v_precision); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1320, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyObject_RichCompare(__pyx_v_bits, __pyx_t_3, Py_GE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1320, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1320, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_1 = __pyx_t_2;
  __pyx_L9_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+01321:             raise ValueError('bits must be in the range 0 <= bits < 2**precision.')
    __pyx_t_3 = NULL;
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_bits_must_be_in_the_range_0_bits};
      __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;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1321, __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(0, 1321, __pyx_L1_error)
+01322:         self._bits = <uint64_t>bits
  __pyx_t_6 = __Pyx_PyLong_As_uint64_t(__pyx_v_bits); if (unlikely((__pyx_t_6 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1322, __pyx_L1_error)
  __pyx_v_self->_bits = ((uint64_t)__pyx_t_6);
+01323:         self._precision = <uint8_t>precision
  __pyx_t_7 = __Pyx_PyLong_As_uint8_t(__pyx_v_precision); if (unlikely((__pyx_t_7 == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1323, __pyx_L1_error)
  __pyx_v_self->_precision = ((uint8_t)__pyx_t_7);
 01324: 
+01325:     @classmethod
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7Geohash_3from_string(PyObject *__pyx_v_cls, 
#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_7Geohash_2from_string, "Construct a GEOHASH from one to twelve base32 characters.");
static PyMethodDef __pyx_mdef_7questdb_7_client_7Geohash_3from_string = {"from_string", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7Geohash_3from_string, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7Geohash_2from_string};
static PyObject *__pyx_pw_7questdb_7_client_7Geohash_3from_string(PyObject *__pyx_v_cls, 
#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_value = 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("from_string (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_value,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(0, 1325, __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(0, 1325, __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, "from_string", 0) < (0)) __PYX_ERR(0, 1325, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("from_string", 1, 1, 1, i); __PYX_ERR(0, 1325, __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(0, 1325, __pyx_L3_error)
    }
    __pyx_v_value = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("from_string", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1325, __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.Geohash.from_string", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_7Geohash_2from_string(((PyTypeObject*)__pyx_v_cls), __pyx_v_value);
  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_7Geohash_2from_string(PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_value) {
  PyObject *__pyx_v_bits = NULL;
  PyObject *__pyx_v_char = NULL;
  PyObject *__pyx_v_digit = 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_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("questdb._client.Geohash.from_string", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_bits);
  __Pyx_XDECREF(__pyx_v_char);
  __Pyx_XDECREF(__pyx_v_digit);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7Geohash_3from_string, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Geohash_from_string, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[174])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1325, __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_Geohash, __pyx_mstate_global->__pyx_n_u_from_string, __pyx_t_18) < (0)) __PYX_ERR(0, 1325, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __Pyx_GetNameInClass(__pyx_t_18, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Geohash, __pyx_mstate_global->__pyx_n_u_from_string); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1325, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_17 = __Pyx_Method_ClassMethod(__pyx_t_18); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1325, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Geohash, __pyx_mstate_global->__pyx_n_u_from_string, __pyx_t_17) < (0)) __PYX_ERR(0, 1325, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 01326:     def from_string(cls, value):
 01327:         """Construct a GEOHASH from one to twelve base32 characters."""
+01328:         if not isinstance(value, str):
  __pyx_t_1 = PyUnicode_Check(__pyx_v_value); 
  __pyx_t_2 = (!__pyx_t_1);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+01329:             raise TypeError('value must be a str.')
    __pyx_t_4 = NULL;
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_value_must_be_a_str};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __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(0, 1329, __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(0, 1329, __pyx_L1_error)
+01330:         if len(value) < 1 or len(value) > 12:
  __pyx_t_6 = PyObject_Length(__pyx_v_value); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1330, __pyx_L1_error)
  __pyx_t_1 = (__pyx_t_6 < 1);
  if (!__pyx_t_1) {
  } else {
    __pyx_t_2 = __pyx_t_1;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_6 = PyObject_Length(__pyx_v_value); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1330, __pyx_L1_error)
  __pyx_t_1 = (__pyx_t_6 > 12);
  __pyx_t_2 = __pyx_t_1;
  __pyx_L5_bool_binop_done:;
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+01331:             raise ValueError('geohash string must contain 1 to 12 characters.')
    __pyx_t_4 = NULL;
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_geohash_string_must_contain_1_to};
      __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(0, 1331, __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(0, 1331, __pyx_L1_error)
+01332:         bits = 0
  __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
  __pyx_v_bits = __pyx_mstate_global->__pyx_int_0;
+01333:         for char in value:
  if (likely(PyList_CheckExact(__pyx_v_value)) || PyTuple_CheckExact(__pyx_v_value)) {
    __pyx_t_3 = __pyx_v_value; __Pyx_INCREF(__pyx_t_3);
    __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
  } else {
    __pyx_t_6 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1333, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1333, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_7)) {
      if (likely(PyList_CheckExact(__pyx_t_3))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1333, __pyx_L1_error)
          #endif
          if (__pyx_t_6 >= __pyx_temp) break;
        }
        __pyx_t_4 = __Pyx_PyList_GetItemRefFast(__pyx_t_3, __pyx_t_6, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_6;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1333, __pyx_L1_error)
          #endif
          if (__pyx_t_6 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_6));
        #else
        __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_6);
        #endif
        ++__pyx_t_6;
      }
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1333, __pyx_L1_error)
    } else {
      __pyx_t_4 = __pyx_t_7(__pyx_t_3);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 1333, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_XDECREF_SET(__pyx_v_char, __pyx_t_4);
    __pyx_t_4 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 01334:             digit = (
+01335:                 '0123456789bcdefghjkmnpqrstuvwxyz'.find(char.lower())
      __pyx_t_9 = __pyx_v_char;
      __Pyx_INCREF(__pyx_t_9);
      __pyx_t_5 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_9, NULL};
        __pyx_t_8 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_lower, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1335, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
      }
      __pyx_t_10 = PyUnicode_Find(__pyx_mstate_global->__pyx_kp_u_0123456789bcdefghjkmnpqrstuvwxyz, __pyx_t_8, 0, PY_SSIZE_T_MAX, 1); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-2))) __PYX_ERR(0, 1335, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = PyLong_FromSsize_t(__pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1335, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_4 = __pyx_t_8;
      __pyx_t_8 = 0;
    } else {
      __Pyx_INCREF(__pyx_mstate_global->__pyx_int_neg_1);
      __pyx_t_4 = __pyx_mstate_global->__pyx_int_neg_1;
    }
    __Pyx_XDECREF_SET(__pyx_v_digit, __pyx_t_4);
    __pyx_t_4 = 0;
+01336:                 if char.isascii() else -1)
    __pyx_t_9 = __pyx_v_char;
    __Pyx_INCREF(__pyx_t_9);
    __pyx_t_5 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_9, NULL};
      __pyx_t_8 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_isascii, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1336, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
    }
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1336, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (__pyx_t_2) {
+01337:             if digit < 0:
    __pyx_t_4 = PyObject_RichCompare(__pyx_v_digit, __pyx_mstate_global->__pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1337, __pyx_L1_error)
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1337, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(__pyx_t_2)) {
/* … */
    }
+01338:                 raise ValueError(
      __pyx_t_8 = NULL;
+01339:                     f'invalid geohash character {char!r}; expected the base32 '
      __pyx_t_9 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_char), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1339, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_11[0] = __pyx_mstate_global->__pyx_kp_u_invalid_geohash_character;
      __pyx_t_11[1] = __pyx_t_9;
      __pyx_t_11[2] = __pyx_mstate_global->__pyx_kp_u_expected_the_base32_alphabet_01;
      __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_11, 3, 26 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9) + 64, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9));
      if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1339, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_5 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_12};
        __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_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1338, __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(0, 1338, __pyx_L1_error)
 01340:                     'alphabet 0123456789bcdefghjkmnpqrstuvwxyz.')
+01341:             bits = bits * 32 + digit
    __pyx_t_4 = __Pyx_PyLong_MultiplyObjC(__pyx_v_bits, __pyx_mstate_global->__pyx_int_32, 32, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1341, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_12 = PyNumber_Add(__pyx_t_4, __pyx_v_digit); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1341, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_bits, __pyx_t_12);
    __pyx_t_12 = 0;
+01342:         return cls(bits, 5 * len(value))
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_12 = NULL;
  __pyx_t_6 = PyObject_Length(__pyx_v_value); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1342, __pyx_L1_error)
  __pyx_t_4 = PyLong_FromSsize_t((5 * __pyx_t_6)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_12, __pyx_v_bits, __pyx_t_4};
    __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_v_cls, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1342, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 01343: 
+01344:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7Geohash_4bits_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_7Geohash_4bits_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_7Geohash_4bits___get__(((struct __pyx_obj_7questdb_7_client_Geohash *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_7Geohash_4bits___get__(struct __pyx_obj_7questdb_7_client_Geohash *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client.Geohash.bits.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01345:     def bits(self) -> int:
 01346:         """The packed geohash bits."""
+01347:         return self._bits
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_uint64_t(__pyx_v_self->_bits); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1347, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 01348: 
+01349:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7Geohash_9precision_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_7Geohash_9precision_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_7Geohash_9precision___get__(((struct __pyx_obj_7questdb_7_client_Geohash *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_7Geohash_9precision___get__(struct __pyx_obj_7questdb_7_client_Geohash *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client.Geohash.precision.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01350:     def precision(self) -> int:
 01351:         """The precision in bits."""
+01352:         return self._precision
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_uint8_t(__pyx_v_self->_precision); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1352, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 01353: 
+01354:     def __repr__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7Geohash_5__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_7Geohash_5__repr__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_7Geohash_4__repr__(((struct __pyx_obj_7questdb_7_client_Geohash *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_7Geohash_4__repr__(struct __pyx_obj_7questdb_7_client_Geohash *__pyx_v_self) {
  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.Geohash.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+01355:         return f'Geohash({self._bits}, {self._precision})'
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyUnicode_From_uint64_t(__pyx_v_self->_bits, 0, ' ', 'd'); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1355, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyUnicode_From_uint8_t(__pyx_v_self->_precision, 0, ' ', 'd'); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1355, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3[0] = __pyx_mstate_global->__pyx_kp_u_Geohash;
  __pyx_t_3[1] = __pyx_t_1;
  __pyx_t_3[2] = __pyx_mstate_global->__pyx_kp_u__27;
  __pyx_t_3[3] = __pyx_t_2;
  __pyx_t_3[4] = __pyx_mstate_global->__pyx_kp_u__5;
  __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_3, 5, 8 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2) + 1, 127);
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1355, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
 01356: 
 01357: 
 01358: # The two value unions the `row()` family accepts, defined here as well
 01359: # as in the stub. A name carried only by `_client.pyi` type-checks and
 01360: # then `ImportError`s at runtime, so the definition lives in both.
 01361: # Not exported: they name a parameter type, they are not part of the
 01362: # ingestion surface.
+01363: TransactionColumnValue = Union[
  __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_Union); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1363, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
/* … */
  __pyx_t_25 = PyTuple_Pack(10, Py_None, ((PyObject *)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool), ((PyObject *)(&PyLong_Type)), ((PyObject *)(&PyFloat_Type)), ((PyObject *)(&PyUnicode_Type)), ((PyObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros), ((PyObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos), __pyx_t_20, ((PyObject *)__pyx_mstate_global->__pyx_ptype_5numpy_ndarray), __pyx_t_18); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1363, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __pyx_t_18 = __Pyx_PyObject_GetItem(__pyx_t_17, __pyx_t_25); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1363, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_TransactionColumnValue, __pyx_t_18) < (0)) __PYX_ERR(0, 1363, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 01364:     None, bool, int, float, str, TimestampMicros, TimestampNanos,
+01365:     datetime.datetime, cnp.ndarray, Decimal]
  __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1365, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 1365, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_Decimal); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1365, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
+01366: RowColumnValue = Union[
  __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_Union); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1366, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
/* … */
  __pyx_t_20 = PyTuple_Pack(19, Py_None, ((PyObject *)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool), ((PyObject *)(&PyLong_Type)), ((PyObject *)(&PyFloat_Type)), ((PyObject *)(&PyUnicode_Type)), ((PyObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros), ((PyObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos), __pyx_t_17, ((PyObject *)__pyx_mstate_global->__pyx_ptype_5numpy_ndarray), __pyx_t_25, __pyx_t_4, __pyx_t_16, ((PyObject *)(&PyBytes_Type)), ((PyObject *)(&PyByteArray_Type)), ((PyObject *)(&PyMemoryView_Type)), ((PyObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Char), ((PyObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_DateMillis), ((PyObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Long256), ((PyObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Geohash)); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 1366, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __pyx_t_16 = __Pyx_PyObject_GetItem(__pyx_t_18, __pyx_t_20); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1366, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_RowColumnValue, __pyx_t_16) < (0)) __PYX_ERR(0, 1366, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 01367:     None, bool, int, float, str, TimestampMicros, TimestampNanos,
+01368:     datetime.datetime, cnp.ndarray, Decimal, uuid.UUID,
  __Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1368, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1368, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_Decimal); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1368, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __Pyx_GetModuleGlobalName(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_uuid); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 1368, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_UUID); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1368, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+01369:     ipaddress.IPv4Address, bytes, bytearray, memoryview, Char, DateMillis,
  __Pyx_GetModuleGlobalName(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ipaddress); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 1369, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_IPv4Address); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1369, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
 01370:     Long256, Geohash]
 01371: # What `schema_overrides` accepts: a kind on its own, or a kind and its
 01372: # argument. Only 'geohash' takes one, the precision in bits.
+01373: SchemaOverrides = Dict[str, Union[str, Tuple[str, SupportsIndex]]]
  __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_Dict); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1373, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_GetModuleGlobalName(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_Union); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 1373, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_Tuple); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1373, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_SupportsIndex); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1373, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_25 = PyTuple_Pack(2, ((PyObject *)(&PyUnicode_Type)), __pyx_t_4); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1373, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_18, __pyx_t_25); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1373, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __pyx_t_25 = PyTuple_Pack(2, ((PyObject *)(&PyUnicode_Type)), __pyx_t_4); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1373, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_20, __pyx_t_25); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1373, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __pyx_t_25 = PyTuple_Pack(2, ((PyObject *)(&PyUnicode_Type)), __pyx_t_4); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1373, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_16, __pyx_t_25); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1373, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_SchemaOverrides, __pyx_t_4) < (0)) __PYX_ERR(0, 1373, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 01374: 
 01375: 
+01376: cdef class QuestDB
struct __pyx_obj_7questdb_7_client_QuestDB {
  PyObject_HEAD
  struct __pyx_vtabstruct_7questdb_7_client_QuestDB *__pyx_vtab;
  struct questdb_db *_db;
  PyObject *_conf_str;
  PyObject *_state_cond;
  size_t _lease_uses;
  size_t _call_uses;
  int _closing;
  int _close_running;
  PyObject *_close_deadline;
  PyObject *_thread_owner_token;
  PyObject *_dispatch_context;
  PyObject *_connection_listener;
  PyObject *_error_handler;
  PyObject *_oidc_auth;
  PyObject *__dict__;
  size_t _cb_refs_key;
  struct __pyx_t_7questdb_7_client_auto_flush_mode_t _auto_flush_mode;
  int _auto_flush_bytes_dynamic;
};

+01377: cdef class Sender
struct __pyx_obj_7questdb_7_client_Sender {
  PyObject_HEAD
  struct __pyx_vtabstruct_7questdb_7_client_Sender *__pyx_vtab;
  PyObject *__weakref__;
  enum line_sender_protocol _c_protocol;
  struct line_sender_opts *_opts;
  struct line_sender *_impl;
  struct __pyx_obj_7questdb_7_client_Buffer *_buffer;
  PyObject *_thread_owner_token;
  PyObject *_dispatch_context;
  PyObject *_error_handler;
  PyObject *_connection_listener;
  PyObject *_oidc_auth;
  PyObject *_bearer_holder;
  PyObject *__dict__;
  struct __pyx_t_7questdb_7_client_auto_flush_mode_t _auto_flush_mode;
  int _auto_flush_bytes_dynamic;
  int64_t *_last_flush_ms;
  size_t _init_buf_size;
  int _in_txn;
  int _native_in_flight;
  int64_t _slot_id;
  struct line_sender_opts *_qwp_ws_opts;
  size_t _cb_refs_key;
};

+01378: cdef class PooledSender
struct __pyx_obj_7questdb_7_client_PooledSender {
  PyObject_HEAD
  struct __pyx_vtabstruct_7questdb_7_client_PooledSender *__pyx_vtab;
  struct qwp_sender *_qwp;
  struct questdb_db *_db;
  struct __pyx_obj_7questdb_7_client_QuestDB *_handle;
  struct __pyx_obj_7questdb_7_client_Buffer *_buffer;
  PyObject *_lock;
  int64_t _batch_started_ms;
  int64_t _call_depth;
};

+01379: cdef class Buffer
struct __pyx_obj_7questdb_7_client_Buffer {
  PyObject_HEAD
  struct __pyx_vtabstruct_7questdb_7_client_Buffer *__pyx_vtab;
  struct line_sender_buffer *_impl;
  struct qdb_pystr_buf *_b;
  size_t _init_buf_size;
  size_t _max_name_len;
  int _qwp;
  int _native_borrows;
  unsigned long _frame_thread;
  int _marker_set;
  int _row_depth;
  PyObject *_row_complete_sender;
};

 01380: 
 01381: 
+01382: cdef void_int may_flush_on_row_complete(Buffer buffer, Sender sender) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_may_flush_on_row_complete(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer, struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender) {
  __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_2);
  __Pyx_AddTraceback("questdb._client.may_flush_on_row_complete", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+01383:     if should_auto_flush(
  __pyx_t_1 = __pyx_f_7questdb_7_client_should_auto_flush((&__pyx_v_sender->_auto_flush_mode), __pyx_v_buffer->_impl, (__pyx_v_sender->_last_flush_ms[0])); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1383, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
 01384:             &sender._auto_flush_mode,
 01385:             buffer._impl,
 01386:             sender._last_flush_ms[0]):
+01387:         sender.flush(buffer)
    __pyx_t_3.__pyx_n = 1;
    __pyx_t_3.buffer = __pyx_v_buffer;
    __pyx_t_2 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_sender->__pyx_vtab)->flush(__pyx_v_sender, 0, &__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1387, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 01388: 
 01389: 
+01390: cdef bint _is_tcp_protocol(line_sender_protocol protocol):
static int __pyx_f_7questdb_7_client__is_tcp_protocol(enum line_sender_protocol __pyx_v_protocol) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 01391:     return (
+01392:         (protocol == line_sender_protocol_tcp) or
  switch (__pyx_v_protocol) {
    case line_sender_protocol_tcp:
    case line_sender_protocol_tcps:
/* … */
    __pyx_t_1 = 1;
/* … */
    break;
    default:
    __pyx_t_1 = 0;
    break;
  }
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 01393:         (protocol == line_sender_protocol_tcps))
 01394: 
 01395: 
+01396: cdef bint _is_http_protocol(line_sender_protocol protocol):
static int __pyx_f_7questdb_7_client__is_http_protocol(enum line_sender_protocol __pyx_v_protocol) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 01397:     return (
+01398:         (protocol == line_sender_protocol_http) or
  switch (__pyx_v_protocol) {
    case line_sender_protocol_http:
    case line_sender_protocol_https:
/* … */
    __pyx_t_1 = 1;
/* … */
    break;
    default:
    __pyx_t_1 = 0;
    break;
  }
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 01399:         (protocol == line_sender_protocol_https))
 01400: 
 01401: 
+01402: cdef bint _is_qwp_udp_protocol(line_sender_protocol protocol):
static int __pyx_f_7questdb_7_client__is_qwp_udp_protocol(enum line_sender_protocol __pyx_v_protocol) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+01403:     return protocol == line_sender_protocol_udp
  __pyx_r = (__pyx_v_protocol == line_sender_protocol_udp);
  goto __pyx_L0;
 01404: 
 01405: 
+01406: cdef bint _is_qwp_ws_protocol(line_sender_protocol protocol):
static int __pyx_f_7questdb_7_client__is_qwp_ws_protocol(enum line_sender_protocol __pyx_v_protocol) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 01407:     return (
+01408:         (protocol == line_sender_protocol_ws) or
  switch (__pyx_v_protocol) {
    case line_sender_protocol_ws:
    case line_sender_protocol_wss:
/* … */
    __pyx_t_1 = 1;
/* … */
    break;
    default:
    __pyx_t_1 = 0;
    break;
  }
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 01409:         (protocol == line_sender_protocol_wss))
 01410: 
 01411: 
+01412: cdef class SenderTransaction:
struct __pyx_obj_7questdb_7_client_SenderTransaction {
  PyObject_HEAD
  struct __pyx_vtabstruct_7questdb_7_client_SenderTransaction *__pyx_vtab;
  struct __pyx_obj_7questdb_7_client_Sender *_sender;
  PyObject *_table_name;
  int _complete;
  int _committing;
};
/* … */
struct __pyx_vtabstruct_7questdb_7_client_SenderTransaction {
  __pyx_t_7questdb_7_client_void_int (*_check_usable)(struct __pyx_obj_7questdb_7_client_SenderTransaction *, PyObject *);
};
static struct __pyx_vtabstruct_7questdb_7_client_SenderTransaction *__pyx_vtabptr_7questdb_7_client_SenderTransaction;
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_17SenderTransaction__check_usable(struct __pyx_obj_7questdb_7_client_SenderTransaction *, PyObject *);

 01413:     """
 01414:     A transaction for a specific table.
 01415: 
 01416:     Transactions are only supported with ILP/HTTP.
 01417: 
 01418:     The sender API can only operate on one transaction at a time.
 01419: 
 01420:     To create a transaction:
 01421: 
 01422:     .. code-block:: python
 01423: 
 01424:         with sender.transaction('table_name') as txn:
 01425:             txn.row(..)
 01426:             txn.dataframe(..)
 01427:     """
 01428:     cdef Sender _sender
 01429:     cdef str _table_name
 01430:     cdef bint _complete
 01431:     cdef bint _committing
 01432: 
+01433:     def __cinit__(self, Sender sender, str table_name):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_17SenderTransaction_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7questdb_7_client_17SenderTransaction_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender = 0;
  PyObject *__pyx_v_table_name = 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_sender,&__pyx_mstate_global->__pyx_n_u_table_name,0};
  PyObject* values[2] = {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(0, 1433, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_VARARGS(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1433, __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(0, 1433, __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(0, 1433, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, i); __PYX_ERR(0, 1433, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 1433, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_VARARGS(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1433, __pyx_L3_error)
    }
    __pyx_v_sender = ((struct __pyx_obj_7questdb_7_client_Sender *)values[0]);
    __pyx_v_table_name = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1433, __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.SenderTransaction.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sender), __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, 1, "sender", 0))) __PYX_ERR(0, 1433, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_table_name), (&PyUnicode_Type), 1, "table_name", 1))) __PYX_ERR(0, 1433, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_17SenderTransaction___cinit__(((struct __pyx_obj_7questdb_7_client_SenderTransaction *)__pyx_v_self), __pyx_v_sender, __pyx_v_table_name);
  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_17SenderTransaction___cinit__(struct __pyx_obj_7questdb_7_client_SenderTransaction *__pyx_v_self, struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender, PyObject *__pyx_v_table_name) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __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.SenderTransaction.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+01434:         if not _is_http_protocol(sender._c_protocol):
  __pyx_t_1 = __pyx_f_7questdb_7_client__is_http_protocol(__pyx_v_sender->_c_protocol); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1434, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+01435:             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(0, 1435, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
+01436:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1436, __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(0, 1436, __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_Transactions_are_only_supported};
      __pyx_t_3 = __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_3)) __PYX_ERR(0, 1435, __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(0, 1435, __pyx_L1_error)
 01437:                 'Transactions are only supported for ILP/HTTP.')
+01438:         self._sender = sender
  __Pyx_INCREF((PyObject *)__pyx_v_sender);
  __Pyx_GIVEREF((PyObject *)__pyx_v_sender);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_sender);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_sender);
  __pyx_v_self->_sender = __pyx_v_sender;
+01439:         self._table_name = table_name
  __Pyx_INCREF(__pyx_v_table_name);
  __Pyx_GIVEREF(__pyx_v_table_name);
  __Pyx_GOTREF(__pyx_v_self->_table_name);
  __Pyx_DECREF(__pyx_v_self->_table_name);
  __pyx_v_self->_table_name = __pyx_v_table_name;
+01440:         self._complete = False
  __pyx_v_self->_complete = 0;
+01441:         self._committing = False
  __pyx_v_self->_committing = 0;
 01442: 
+01443:     cdef inline void_int _check_usable(self, str method) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_17SenderTransaction__check_usable(struct __pyx_obj_7questdb_7_client_SenderTransaction *__pyx_v_self, PyObject *__pyx_v_method) {
  __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_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_7);
  __Pyx_AddTraceback("questdb._client.SenderTransaction._check_usable", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01444:         """Keep completion an absorbing state for the whole object."""
+01445:         if self._complete:
  if (unlikely(__pyx_v_self->_complete)) {
/* … */
  }
+01446:             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(0, 1446, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
+01447:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1447, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1447, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+01448:                 f"Transaction already completed, can't call {method}().")
    __pyx_t_4 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1448, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6[0] = __pyx_mstate_global->__pyx_kp_u_Transaction_already_completed_ca;
    __pyx_t_6[1] = __pyx_t_4;
    __pyx_t_6[2] = __pyx_mstate_global->__pyx_kp_u__28;
    __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_6, 3, 42 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4) + 3, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4));
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1448, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_8 = 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_8 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_5, __pyx_t_7};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__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_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1446, __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(0, 1446, __pyx_L1_error)
+01449:         if self._committing:
  if (unlikely(__pyx_v_self->_committing)) {
/* … */
  }
+01450:             raise QuestDBError(
    __pyx_t_3 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1450, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
+01451:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1451, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1451, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+01452:                 f"Transaction commit is already in progress, can't call "
    __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_6, 3, 54 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5) + 3, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5));
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1452, __pyx_L1_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_3 = PyMethod_GET_SELF(__pyx_t_7);
      assert(__pyx_t_3);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
      __pyx_t_8 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_2, __pyx_t_4};
      __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_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 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(0, 1450, __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(0, 1450, __pyx_L1_error)
+01453:                 f"{method}().")
    __pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1453, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6[0] = __pyx_mstate_global->__pyx_kp_u_Transaction_commit_is_already_in;
    __pyx_t_6[1] = __pyx_t_5;
    __pyx_t_6[2] = __pyx_mstate_global->__pyx_kp_u__28;
 01454: 
+01455:     def __enter__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_17SenderTransaction_3__enter__(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_17SenderTransaction_3__enter__ = {"__enter__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_17SenderTransaction_3__enter__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_17SenderTransaction_3__enter__(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
) {
  #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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__enter__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__enter__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_17SenderTransaction_2__enter__(((struct __pyx_obj_7questdb_7_client_SenderTransaction *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_17SenderTransaction_2__enter__(struct __pyx_obj_7questdb_7_client_SenderTransaction *__pyx_v_self) {
  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.SenderTransaction.__enter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_17SenderTransaction_3__enter__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SenderTransaction___enter, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[177])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1455, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_SenderTransaction, __pyx_mstate_global->__pyx_n_u_enter, __pyx_t_4) < (0)) __PYX_ERR(0, 1455, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+01456:         self._check_usable('__enter__')
  __pyx_t_1 = __pyx_f_7questdb_7_client_17SenderTransaction__check_usable(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1456, __pyx_L1_error)
+01457:         self._sender._check_not_in_own_callback('transaction')
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self->_sender, __pyx_mstate_global->__pyx_n_u_transaction, NULL); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1457, __pyx_L1_error)
+01458:         if self._sender._in_txn:
  if (unlikely(__pyx_v_self->_sender->_in_txn)) {
/* … */
  }
+01459:             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(0, 1459, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+01460:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1460, __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(0, 1460, __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_Already_inside_a_transaction_can};
      __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(0, 1459, __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(0, 1459, __pyx_L1_error)
 01461:                 'Already inside a transaction, can\'t start another.')
 01462:         # A transaction requires a clear buffer, which a `dataframe()`
 01463:         # part-way through its plan build still has -- it has written
 01464:         # nothing yet. A transaction opened there would take in rows the
 01465:         # caller wrote outside any transaction, and its rollback would
 01466:         # discard them.
+01467:         if self._sender._buffer is not None:
  __pyx_t_8 = (((PyObject *)__pyx_v_self->_sender->_buffer) != Py_None);
  if (__pyx_t_8) {
/* … */
  }
+01468:             self._sender._buffer._check_not_in_row('__enter__')
    __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_self->_sender->_buffer, __pyx_mstate_global->__pyx_n_u_enter, NULL); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1468, __pyx_L1_error)
+01469:         if self._sender._buffer is not None and len(self._sender._buffer):
  __pyx_t_9 = (((PyObject *)__pyx_v_self->_sender->_buffer) != Py_None);
  if (__pyx_t_9) {
  } else {
    __pyx_t_8 = __pyx_t_9;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_2 = ((PyObject *)__pyx_v_self->_sender->_buffer);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_10 = PyObject_Length(__pyx_t_2); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1469, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_9 = (__pyx_t_10 != 0);
  __pyx_t_8 = __pyx_t_9;
  __pyx_L6_bool_binop_done:;
  if (__pyx_t_8) {
/* … */
  }
+01470:             if self._sender._auto_flush_mode.enabled:
    if (likely(__pyx_v_self->_sender->_auto_flush_mode.enabled)) {
/* … */
      goto __pyx_L8;
    }
+01471:                 self._sender.flush()
      __pyx_t_2 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_self->_sender->__pyx_vtab)->flush(__pyx_v_self->_sender, 0, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1471, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 01472:             else:
+01473:                 raise QuestDBError(
    /*else*/ {
      __pyx_t_4 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1473, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
+01474:                     QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1474, __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(0, 1474, __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_Sender_buffer_must_be_clear_when};
        __pyx_t_2 = __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_2)) __PYX_ERR(0, 1473, __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(0, 1473, __pyx_L1_error)
    }
    __pyx_L8:;
 01475:                     'Sender buffer must be clear when starting a ' +
 01476:                     'transaction. You must call `.flush()` before this call.')
+01477:         self._sender._in_txn = True
  __pyx_v_self->_sender->_in_txn = 1;
+01478:         return self
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;
 01479: 
+01480:     def __exit__(self, exc_type, exc_val, exc_tb):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_17SenderTransaction_5__exit__(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_17SenderTransaction_5__exit__ = {"__exit__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_17SenderTransaction_5__exit__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_17SenderTransaction_5__exit__(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_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_exc_type,&__pyx_mstate_global->__pyx_n_u_exc_val,&__pyx_mstate_global->__pyx_n_u_exc_tb,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(0, 1480, __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(0, 1480, __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(0, 1480, __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(0, 1480, __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(0, 1480, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, i); __PYX_ERR(0, 1480, __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(0, 1480, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1480, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1480, __pyx_L3_error)
    }
    __pyx_v_exc_type = values[0];
    __pyx_v_exc_val = values[1];
    __pyx_v_exc_tb = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 1480, __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.SenderTransaction.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_17SenderTransaction_4__exit__(((struct __pyx_obj_7questdb_7_client_SenderTransaction *)__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_17SenderTransaction_4__exit__(struct __pyx_obj_7questdb_7_client_SenderTransaction *__pyx_v_self, 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_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client.SenderTransaction.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_17SenderTransaction_5__exit__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SenderTransaction___exit, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[178])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1480, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_SenderTransaction, __pyx_mstate_global->__pyx_n_u_exit, __pyx_t_4) < (0)) __PYX_ERR(0, 1480, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+01481:         if exc_type is not None:
  __pyx_t_1 = (__pyx_v_exc_type != Py_None);
  if (__pyx_t_1) {
/* … */
  }
+01482:             if not self._complete:
    __pyx_t_1 = (!__pyx_v_self->_complete);
    if (__pyx_t_1) {
/* … */
    }
+01483:                 self.rollback()
      __pyx_t_3 = ((PyObject *)__pyx_v_self);
      __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_rollback, __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(0, 1483, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+01484:             return False
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(Py_False);
    __pyx_r = Py_False;
    goto __pyx_L0;
 01485:         else:
+01486:             if not self._complete:
  /*else*/ {
    __pyx_t_1 = (!__pyx_v_self->_complete);
    if (__pyx_t_1) {
/* … */
    }
+01487:                 self.commit()
      __pyx_t_3 = ((PyObject *)__pyx_v_self);
      __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_commit, __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(0, 1487, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+01488:             return True
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(Py_True);
    __pyx_r = Py_True;
    goto __pyx_L0;
  }
 01489: 
+01490:     def row(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_17SenderTransaction_7row(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_17SenderTransaction_6row, "\n        Write a row for the table in the transaction.\n\n        The table name is taken from the transaction.\n\n        **Note**: Support for NumPy arrays (``numpy.array``) requires QuestDB server version 9.0.0 or higher.\n\n        UUID, IPV4, BINARY, CHAR, DATE, LONG256, and GEOHASH columns are\n        QWP-only and are not supported by ``SenderTransaction``, which is\n        ILP/HTTP-only by construction.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_17SenderTransaction_7row = {"row", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_17SenderTransaction_7row, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_17SenderTransaction_6row};
static PyObject *__pyx_pw_7questdb_7_client_17SenderTransaction_7row(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_symbols = 0;
  PyObject *__pyx_v_columns = 0;
  PyObject *__pyx_v_at = 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 (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_at,&__pyx_mstate_global->__pyx_n_u_symbols,&__pyx_mstate_global->__pyx_n_u_columns,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(0, 1490, __pyx_L3_error)
    if (likely(__pyx_kwds_len > 0)) {
      switch (__pyx_nargs) {
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, 0, __pyx_kwds_len, "row", 0) < (0)) __PYX_ERR(0, 1490, __pyx_L3_error)
/* … */
  /* 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_17SenderTransaction_6row(struct __pyx_obj_7questdb_7_client_SenderTransaction *__pyx_v_self, PyObject *__pyx_v_symbols, PyObject *__pyx_v_columns, PyObject *__pyx_v_at) {
  struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buf = 0;
  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.SenderTransaction.row", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_buf);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1490, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
/* … */
  __pyx_t_25 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1490, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_Optional_str) < (0)) __PYX_ERR(0, 1490, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_columns, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_Union_None_boo) < (0)) __PYX_ERR(0, 1490, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_at, __pyx_mstate_global->__pyx_kp_u_Union_ServerTimestampType_Timest) < (0)) __PYX_ERR(0, 1490, __pyx_L1_error)
  __pyx_t_16 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_17SenderTransaction_7row, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SenderTransaction_row, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[179])); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1490, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_16);
  #endif
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_16, __pyx_t_4);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_16, __pyx_t_25);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_SenderTransaction, __pyx_mstate_global->__pyx_n_u_row_2, __pyx_t_16) < (0)) __PYX_ERR(0, 1490, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 01491:             self,
 01492:             *,
+01493:             symbols: Optional[Dict[str, Optional[str]]]=None,
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_symbols, Py_None) < (0)) __PYX_ERR(0, 1490, __pyx_L1_error)
 01494:             columns: Optional[Dict[
 01495:                 str,
 01496:                 Union[None, bool, int, float, str, TimestampMicros, TimestampNanos, datetime.datetime, numpy.ndarray, Decimal]]
+01497:                 ]=None,
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None));
      for (Py_ssize_t i = 0; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseKeywordRequired("row", *(__pyx_pyargnames[i - 0])); __PYX_ERR(0, 1490, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 0)) {
      goto __pyx_L5_argtuple_error;
    } else {
      __Pyx_RaiseKeywordRequired("row", __pyx_mstate_global->__pyx_n_u_at); __PYX_ERR(0, 1490, __pyx_L3_error)
    }
    __pyx_v_at = values[0];
    __pyx_v_symbols = ((PyObject*)values[1]);
    __pyx_v_columns = ((PyObject*)values[2]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("row", 1, 0, 0, __pyx_nargs); __PYX_ERR(0, 1490, __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.SenderTransaction.row", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_symbols), (&PyDict_Type), 1, "symbols", 2))) __PYX_ERR(0, 1493, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_columns), (&PyDict_Type), 1, "columns", 2))) __PYX_ERR(0, 1494, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_17SenderTransaction_6row(((struct __pyx_obj_7questdb_7_client_SenderTransaction *)__pyx_v_self), __pyx_v_symbols, __pyx_v_columns, __pyx_v_at);
/* … */
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_columns, Py_None) < (0)) __PYX_ERR(0, 1490, __pyx_L1_error)
 01498:             at: Union[ServerTimestampType, TimestampNanos, datetime.datetime]):
 01499:         """
 01500:         Write a row for the table in the transaction.
 01501: 
 01502:         The table name is taken from the transaction.
 01503: 
 01504:         **Note**: Support for NumPy arrays (``numpy.array``) requires QuestDB server version 9.0.0 or higher.
 01505: 
 01506:         UUID, IPV4, BINARY, CHAR, DATE, LONG256, and GEOHASH columns are
 01507:         QWP-only and are not supported by ``SenderTransaction``, which is
 01508:         ILP/HTTP-only by construction.
 01509:         """
 01510:         cdef Buffer buf
+01511:         self._check_usable('row')
  __pyx_t_1 = __pyx_f_7questdb_7_client_17SenderTransaction__check_usable(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_row_2); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1511, __pyx_L1_error)
+01512:         if at is None:
  __pyx_t_2 = (__pyx_v_at == Py_None);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+01513:             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(0, 1513, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
+01514:                 QuestDBErrorCode.InvalidTimestamp,
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1514, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1514, __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_at_must_be_of_type_TimestampNan};
      __pyx_t_3 = __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_3)) __PYX_ERR(0, 1513, __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(0, 1513, __pyx_L1_error)
 01515:                 "`at` must be of type TimestampNanos, datetime, or ServerTimestamp"
 01516:             )
 01517: 
+01518:         if self._sender._buffer is None:
  __pyx_t_2 = (((PyObject *)__pyx_v_self->_sender->_buffer) == Py_None);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+01519:             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(0, 1519, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
+01520:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1520, __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(0, 1520, __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_row_can_t_be_called_Sender_is_cl};
      __pyx_t_3 = __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_3)) __PYX_ERR(0, 1519, __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(0, 1519, __pyx_L1_error)
 01521:                 "row() can\'t be called: Sender is closed."
 01522:             )
 01523: 
+01524:         self._sender._check_not_in_own_callback('transaction.row')
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self->_sender, __pyx_mstate_global->__pyx_kp_u_transaction_row, NULL); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1524, __pyx_L1_error)
 01525:         # The sender holds the only reference to the buffer, and a column
 01526:         # value whose conversion runs Python code can reach back in here.
 01527:         # A strong local reference keeps the buffer alive for the whole
 01528:         # row, including its cleanup.
+01529:         buf = self._sender._buffer
  __pyx_t_3 = ((PyObject *)__pyx_v_self->_sender->_buffer);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_v_buf = ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_3);
  __pyx_t_3 = 0;
+01530:         buf._row(
  __pyx_t_9.__pyx_n = 3;
  __pyx_t_9.symbols = __pyx_v_symbols;
  __pyx_t_9.columns = __pyx_v_columns;
  __pyx_t_9.at = __pyx_v_at;
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_Buffer *)__pyx_v_buf->__pyx_vtab)->_row(__pyx_v_buf, 0, ((PyObject*)__pyx_t_3), &__pyx_t_9); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1530, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 01531:             False,  # allow_auto_flush
+01532:             self._table_name,
  __pyx_t_3 = __pyx_v_self->_table_name;
  __Pyx_INCREF(__pyx_t_3);
 01533:             symbols=symbols,
 01534:             columns=columns,
 01535:             at=at)
+01536:         return self
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;
 01537: 
+01538:     def dataframe(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_17SenderTransaction_9dataframe(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_17SenderTransaction_8dataframe, "\n        Write a dataframe for the table in the transaction.\n\n        The table name is taken from the transaction.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_17SenderTransaction_9dataframe = {"dataframe", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_17SenderTransaction_9dataframe, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_17SenderTransaction_8dataframe};
static PyObject *__pyx_pw_7questdb_7_client_17SenderTransaction_9dataframe(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_df = 0;
  PyObject *__pyx_v_symbols = 0;
  PyObject *__pyx_v_at = 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("dataframe (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_df_2,&__pyx_mstate_global->__pyx_n_u_at,&__pyx_mstate_global->__pyx_n_u_symbols,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(0, 1538, __pyx_L3_error)
    if (likely(__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(0, 1538, __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, "dataframe", 0) < (0)) __PYX_ERR(0, 1538, __pyx_L3_error)
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_n_u_auto));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("dataframe", 1, 1, 1, i); __PYX_ERR(0, 1538, __pyx_L3_error) }
      }
      for (Py_ssize_t i = 1; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseKeywordRequired("dataframe", *(__pyx_pyargnames[i - 0])); __PYX_ERR(0, 1538, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      __Pyx_RaiseKeywordRequired("dataframe", __pyx_mstate_global->__pyx_n_u_at); __PYX_ERR(0, 1538, __pyx_L3_error)
    }
    __pyx_v_df = values[0];
    __pyx_v_at = values[1];
    __pyx_v_symbols = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("dataframe", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1538, __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.SenderTransaction.dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_17SenderTransaction_8dataframe(((struct __pyx_obj_7questdb_7_client_SenderTransaction *)__pyx_v_self), __pyx_v_df, __pyx_v_symbols, __pyx_v_at);
  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_17SenderTransaction_8dataframe(struct __pyx_obj_7questdb_7_client_SenderTransaction *__pyx_v_self, PyObject *__pyx_v_df, PyObject *__pyx_v_symbols, PyObject *__pyx_v_at) {
  struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer = 0;
  int __pyx_v_outer_in_flight;
  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.SenderTransaction.dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_buffer);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_16 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1538, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_n_u_auto) < (0)) __PYX_ERR(0, 1538, __pyx_L1_error)
  __pyx_t_25 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1538, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_kp_u_Union_str_bool_List_int_List_str) < (0)) __PYX_ERR(0, 1538, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_at, __pyx_mstate_global->__pyx_kp_u_Union_ServerTimestampType_int_st) < (0)) __PYX_ERR(0, 1538, __pyx_L1_error)
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_17SenderTransaction_9dataframe, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SenderTransaction_dataframe, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[180])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1538, __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_CyFunction_SetDefaultsKwDict(__pyx_t_4, __pyx_t_16);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_25);
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_SenderTransaction, __pyx_mstate_global->__pyx_n_u_dataframe, __pyx_t_4) < (0)) __PYX_ERR(0, 1538, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 01539:             self,
 01540:             df,  # : pd.DataFrame
 01541:             *,
 01542:             symbols: Union[str, bool, List[int], List[str]] = 'auto',
 01543:             at: Union[ServerTimestampType, int, str, TimestampNanos, datetime.datetime]):
 01544:         """
 01545:         Write a dataframe for the table in the transaction.
 01546: 
 01547:         The table name is taken from the transaction.
 01548:         """
 01549:         # Referenced for the whole call: the serializer writes into the
 01550:         # buffer through raw pointers.
+01551:         cdef Buffer buffer = self._sender._buffer
  __pyx_t_1 = ((PyObject *)__pyx_v_self->_sender->_buffer);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_buffer = ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_1);
  __pyx_t_1 = 0;
 01552:         cdef bint outer_in_flight
+01553:         self._check_usable('dataframe')
  __pyx_t_2 = __pyx_f_7questdb_7_client_17SenderTransaction__check_usable(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_dataframe); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1553, __pyx_L1_error)
+01554:         if at is None:
  __pyx_t_3 = (__pyx_v_at == Py_None);
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+01555:             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(0, 1555, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
+01556:                 QuestDBErrorCode.InvalidTimestamp,
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1556, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1556, __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_at_must_be_of_type_TimestampNan};
      __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(0, 1555, __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(0, 1555, __pyx_L1_error)
 01557:                 "`at` must be of type TimestampNanos, datetime, or ServerTimestamp"
 01558:             )
+01559:         if buffer is None:
  __pyx_t_3 = (((PyObject *)__pyx_v_buffer) == Py_None);
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+01560:             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(0, 1560, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
+01561:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1561, __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(0, 1561, __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_dataframe_can_t_be_called_Sender};
      __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(0, 1560, __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(0, 1560, __pyx_L1_error)
 01562:                 "dataframe() can\'t be called: Sender is closed."
 01563:             )
+01564:         self._sender._check_not_in_own_callback('transaction.dataframe')
  __pyx_t_2 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self->_sender, __pyx_mstate_global->__pyx_kp_u_transaction_dataframe, NULL); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1564, __pyx_L1_error)
 01565:         # Refused before the borrow below, as `_dataframe` would refuse it
 01566:         # after: a frame this call came back into from its own Python keeps
 01567:         # the borrow it holds.
+01568:         buffer._check_not_in_row('dataframe')
  __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_buffer, __pyx_mstate_global->__pyx_n_u_dataframe, NULL); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1568, __pyx_L1_error)
 01569:         # Borrow the buffer as `Sender.dataframe()` does, so that reading it
 01570:         # or closing the sender from another thread raises instead of racing
 01571:         # the serializer or freeing the buffer under it.
+01572:         outer_in_flight = self._sender._enter_native()
  __pyx_v_outer_in_flight = __pyx_f_7questdb_7_client_6Sender__enter_native(__pyx_v_self->_sender);
+01573:         buffer._begin_frame_borrow()
  __pyx_f_7questdb_7_client_6Buffer__begin_frame_borrow(__pyx_v_buffer);
+01574:         try:
  /*try:*/ {
+01575:             _dataframe(
    __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe(__pyx_v_buffer, __pyx_f_7questdb_7_client_auto_flush_blank(), __pyx_v_buffer->_impl, __pyx_v_df, __pyx_t_1, Py_None, __pyx_v_symbols, __pyx_v_at); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1575, __pyx_L6_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
 01576:                 buffer,
 01577:                 auto_flush_blank(),
 01578:                 buffer._impl,
 01579:                 df,
+01580:                 self._table_name,
    __pyx_t_1 = __pyx_v_self->_table_name;
    __Pyx_INCREF(__pyx_t_1);
 01581:                 None, # table_name_col,
 01582:                 symbols,
 01583:                 at)
 01584:         finally:
+01585:             buffer._end_frame_borrow()
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_f_7questdb_7_client_6Buffer__end_frame_borrow(__pyx_v_buffer);
/* … */
        __pyx_f_7questdb_7_client_6Buffer__end_frame_borrow(__pyx_v_buffer);
+01586:             self._sender._exit_native(outer_in_flight)
      __pyx_f_7questdb_7_client_6Sender__exit_native(__pyx_v_self->_sender, __pyx_v_outer_in_flight);
/* … */
        __pyx_f_7questdb_7_client_6Sender__exit_native(__pyx_v_self->_sender, __pyx_v_outer_in_flight);
+01587:             _oidc_raise_unscheduled_main()
      __pyx_t_2 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1587, __pyx_L1_error)
      goto __pyx_L7;
    }
    __pyx_L6_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 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_16, &__pyx_t_17);
      if ( unlikely(__Pyx_GetException(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14) < 0)) __Pyx_ErrFetch(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
      __Pyx_XGOTREF(__pyx_t_12);
      __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_t_9 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_11 = __pyx_filename;
      {
/* … */
        __pyx_t_2 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1587, __pyx_L9_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);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_XGIVEREF(__pyx_t_14);
      __Pyx_ErrRestore(__pyx_t_12, __pyx_t_13, __pyx_t_14);
      __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
      __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_11;
      goto __pyx_L1_error;
      __pyx_L9_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);
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L7:;
  }
+01588:         return self
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;
 01589: 
+01590:     def commit(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_17SenderTransaction_11commit(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_17SenderTransaction_10commit, "\n        Commit the transaction.\n        \n        A commit is also automatic at the end of a successful `with` block.\n\n        This will flush the buffer.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_17SenderTransaction_11commit = {"commit", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_17SenderTransaction_11commit, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_17SenderTransaction_10commit};
static PyObject *__pyx_pw_7questdb_7_client_17SenderTransaction_11commit(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
) {
  #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("commit (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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("commit", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("commit", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_17SenderTransaction_10commit(((struct __pyx_obj_7questdb_7_client_SenderTransaction *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_17SenderTransaction_10commit(struct __pyx_obj_7questdb_7_client_SenderTransaction *__pyx_v_self) {
  PyObject *__pyx_v_rows_left = 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_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_AddTraceback("questdb._client.SenderTransaction.commit", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_rows_left);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_17SenderTransaction_11commit, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SenderTransaction_commit, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[181])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1590, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_SenderTransaction, __pyx_mstate_global->__pyx_n_u_commit, __pyx_t_4) < (0)) __PYX_ERR(0, 1590, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 01591:         """
 01592:         Commit the transaction.
 01593:         
 01594:         A commit is also automatic at the end of a successful `with` block.
 01595: 
 01596:         This will flush the buffer.
 01597:         """
+01598:         if self._complete:
  if (unlikely(__pyx_v_self->_complete)) {
/* … */
  }
+01599:             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(0, 1599, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
+01600:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1600, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1600, __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_Transaction_already_completed_ca_2};
      __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(0, 1599, __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(0, 1599, __pyx_L1_error)
 01601:                 'Transaction already completed, can\'t commit')
+01602:         if self._committing:
  if (unlikely(__pyx_v_self->_committing)) {
/* … */
  }
+01603:             raise QuestDBError(
    __pyx_t_3 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1603, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
+01604:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1604, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1604, __pyx_L1_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_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_6 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_4, __pyx_mstate_global->__pyx_kp_u_Transaction_commit_is_already_in_2};
      __pyx_t_1 = __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_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_1)) __PYX_ERR(0, 1603, __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(0, 1603, __pyx_L1_error)
 01605:                 "Transaction commit is already in progress, can't commit.")
+01606:         self._sender._check_not_in_own_callback('transaction.commit')
  __pyx_t_7 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self->_sender, __pyx_mstate_global->__pyx_kp_u_transaction_commit, NULL); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1606, __pyx_L1_error)
+01607:         if self._sender._buffer is None:
  __pyx_t_8 = (((PyObject *)__pyx_v_self->_sender->_buffer) == Py_None);
  if (unlikely(__pyx_t_8)) {
/* … */
  }
+01608:             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(0, 1608, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+01609:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1609, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1609, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 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[3] = {__pyx_t_5, __pyx_t_2, __pyx_mstate_global->__pyx_kp_u_commit_can_t_be_called_Sender_is};
      __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_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1608, __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(0, 1608, __pyx_L1_error)
 01610:                 "commit() can't be called: Sender is closed.")
 01611:         # Checked here rather than left to the flush below, which is
 01612:         # skipped when the buffer is empty. `dataframe()` counts into
 01613:         # `_row_depth` before it writes anything, so a commit re-entered
 01614:         # from the plan build would find nothing to flush, end the
 01615:         # transaction, and leave the frame's rows to go out afterwards
 01616:         # outside it.
+01617:         self._sender._buffer._check_not_in_row('commit')
  __pyx_t_7 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_self->_sender->_buffer, __pyx_mstate_global->__pyx_n_u_commit, NULL); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1617, __pyx_L1_error)
 01618:         # `_in_txn` has to come down first, because an explicit flush
 01619:         # inside a transaction is refused.
+01620:         self._committing = True
  __pyx_v_self->_committing = 1;
+01621:         self._sender._in_txn = False
  __pyx_v_self->_sender->_in_txn = 0;
+01622:         try:
  /*try:*/ {
+01623:             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_1); __pyx_t_1 = 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_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_L7_error;
      __pyx_L14_try_end:;
    }
+01624:                 if len(self._sender._buffer):
        __pyx_t_1 = ((PyObject *)__pyx_v_self->_sender->_buffer);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_12 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_12 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1624, __pyx_L9_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_8 = (__pyx_t_12 != 0);
        if (__pyx_t_8) {
/* … */
        }
+01625:                     self._sender.flush(transactional=True)
          __pyx_t_4 = ((PyObject *)__pyx_v_self->_sender);
          __Pyx_INCREF(__pyx_t_4);
          __pyx_t_6 = 0;
          {
            PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_4, NULL};
            __pyx_t_2 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1625, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_2);
            if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_transactional, Py_True, __pyx_t_2, __pyx_callargs+1, 0) < (0)) __PYX_ERR(0, 1625, __pyx_L9_error)
            __pyx_t_1 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_flush, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_2);
            __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(0, 1625, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_1);
          }
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+01626:             except:
      /*except:*/ {
        __Pyx_AddTraceback("questdb._client.SenderTransaction.commit", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_4) < 0) __PYX_ERR(0, 1626, __pyx_L11_except_error)
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_2);
        __Pyx_XGOTREF(__pyx_t_4);
 01627:                 # A flush that reached the wire clears the buffer whether it
 01628:                 # succeeded or not, so there is nothing left to commit and
 01629:                 # the transaction is over -- saying otherwise would strand
 01630:                 # the sender inside it and make the next `close(flush=True)`
 01631:                 # raise over the caller's own error.
 01632:                 #
 01633:                 # Rows are still in the buffer only when `Sender.flush`
 01634:                 # refused before making the native call, which is a short
 01635:                 # and closed list: a row part-way through being written, a
 01636:                 # call from inside the sender's own callback or while the
 01637:                 # sender is already in a native call, and a sender already
 01638:                 # closed. In those the transaction is still the caller's to
 01639:                 # finish or roll back.
 01640:                 #
 01641:                 # The buffer is therefore the discriminator, and it is
 01642:                 # `Sender.flush` that maintains it, not this method.
 01643:                 # `test_flush_clears_the_buffer_on_a_wire_failure` pins that
 01644:                 # behaviour by name for exactly this reason.
 01645:                 #
 01646:                 # Asking it cannot be allowed to raise: `len()` goes through
 01647:                 # `Buffer.__len__`, which refuses on a closed buffer, and a
 01648:                 # sender closed during the flush would put that error over
 01649:                 # the caller's own. A closed buffer holds no rows, which is
 01650:                 # the same answer an empty one gives.
+01651:                 rows_left = False
        __Pyx_INCREF(Py_False);
        __pyx_v_rows_left = Py_False;
+01652:                 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_L25_try_end;
          __pyx_L18_error:;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
          __pyx_L20_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_L11_except_error;
          __pyx_L19_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_L25_try_end:;
        }
+01653:                     rows_left = (self._sender._buffer is not None
            __pyx_t_8 = (((PyObject *)__pyx_v_self->_sender->_buffer) != Py_None);
            if (__pyx_t_8) {
            } else {
              __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1653, __pyx_L18_error)
              __Pyx_GOTREF(__pyx_t_3);
              __pyx_t_5 = __pyx_t_3;
              __pyx_t_3 = 0;
              goto __pyx_L26_bool_binop_done;
            }
+01654:                                  and len(self._sender._buffer) > 0)
            __pyx_t_3 = ((PyObject *)__pyx_v_self->_sender->_buffer);
            __Pyx_INCREF(__pyx_t_3);
            __pyx_t_12 = PyObject_Length(__pyx_t_3); if (unlikely(__pyx_t_12 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1654, __pyx_L18_error)
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __pyx_t_8 = (__pyx_t_12 > 0);
            __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1654, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_5 = __pyx_t_3;
            __pyx_t_3 = 0;
            __pyx_L26_bool_binop_done:;
            __Pyx_DECREF_SET(__pyx_v_rows_left, __pyx_t_5);
            __pyx_t_5 = 0;
+01655:                 except QuestDBError:
          __Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_3, &__pyx_t_16);
          __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1655, __pyx_L20_except_error)
          __Pyx_GOTREF(__pyx_t_17);
          __pyx_t_18 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_5, __pyx_t_17);
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __Pyx_ErrRestore(__pyx_t_5, __pyx_t_3, __pyx_t_16);
          __pyx_t_5 = 0; __pyx_t_3 = 0; __pyx_t_16 = 0;
          if (__pyx_t_18) {
            __Pyx_ErrRestore(0,0,0);
+01656:                     rows_left = False
            __Pyx_INCREF(Py_False);
            __Pyx_DECREF_SET(__pyx_v_rows_left, Py_False);
            goto __pyx_L19_exception_handled;
          }
          goto __pyx_L20_except_error;
+01657:                 if rows_left:
        __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_rows_left); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1657, __pyx_L11_except_error)
        if (__pyx_t_8) {
/* … */
          goto __pyx_L30;
        }
+01658:                     self._sender._in_txn = True
          __pyx_v_self->_sender->_in_txn = 1;
 01659:                 else:
+01660:                     self._complete = True
        /*else*/ {
          __pyx_v_self->_complete = 1;
        }
        __pyx_L30:;
+01661:                 raise
        __Pyx_GIVEREF(__pyx_t_1);
        __Pyx_GIVEREF(__pyx_t_2);
        __Pyx_XGIVEREF(__pyx_t_4);
        __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_2, __pyx_t_4);
        __pyx_t_1 = 0;  __pyx_t_2 = 0;  __pyx_t_4 = 0; 
        __PYX_ERR(0, 1661, __pyx_L11_except_error)
      }
+01662:             self._complete = True
    __pyx_v_self->_complete = 1;
  }
 01663:         finally:
 01664:             # A commit releases the GIL in `flush()`. Refuse another
 01665:             # terminal operation while that transition owns the buffer,
 01666:             # then make the transition available again only after every
 01667:             # success/failure state above has been published.
+01668:             self._committing = False
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_v_self->_committing = 0;
      goto __pyx_L8;
    }
    __pyx_L7_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
      __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 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_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_14, &__pyx_t_13);
      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_15);
      __Pyx_XGOTREF(__pyx_t_14);
      __Pyx_XGOTREF(__pyx_t_13);
      __pyx_t_18 = __pyx_lineno; __pyx_t_19 = __pyx_clineno; __pyx_t_20 = __pyx_filename;
      {
        __pyx_v_self->_committing = 0;
      }
      __Pyx_XGIVEREF(__pyx_t_15);
      __Pyx_XGIVEREF(__pyx_t_14);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_14, __pyx_t_13);
      __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_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0;
      __pyx_lineno = __pyx_t_18; __pyx_clineno = __pyx_t_19; __pyx_filename = __pyx_t_20;
      goto __pyx_L1_error;
    }
    __pyx_L8:;
  }
 01669: 
+01670:     def rollback(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_17SenderTransaction_13rollback(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_17SenderTransaction_12rollback, "\n        Roll back the transaction.\n\n        A rollback is also automatic at the end of a failed `with` block.\n\n        This will clear the buffer. When ``rollback()`` is called from\n        code that a ``row()`` or ``dataframe()`` on this sender runs\n        while it writes, such as a column value's conversion, it raises\n        :class:`QuestDBError <questdb.QuestDBError>` (``InvalidApiCall``)\n        and leaves the transaction as it was.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_17SenderTransaction_13rollback = {"rollback", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_17SenderTransaction_13rollback, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_17SenderTransaction_12rollback};
static PyObject *__pyx_pw_7questdb_7_client_17SenderTransaction_13rollback(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
) {
  #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("rollback (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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("rollback", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("rollback", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_17SenderTransaction_12rollback(((struct __pyx_obj_7questdb_7_client_SenderTransaction *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_17SenderTransaction_12rollback(struct __pyx_obj_7questdb_7_client_SenderTransaction *__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_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb._client.SenderTransaction.rollback", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_17SenderTransaction_13rollback, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SenderTransaction_rollback, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[182])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1670, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_SenderTransaction, __pyx_mstate_global->__pyx_n_u_rollback, __pyx_t_4) < (0)) __PYX_ERR(0, 1670, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 01671:         """
 01672:         Roll back the transaction.
 01673: 
 01674:         A rollback is also automatic at the end of a failed `with` block.
 01675: 
 01676:         This will clear the buffer. When ``rollback()`` is called from
 01677:         code that a ``row()`` or ``dataframe()`` on this sender runs
 01678:         while it writes, such as a column value's conversion, it raises
 01679:         :class:`QuestDBError <questdb.QuestDBError>` (``InvalidApiCall``)
 01680:         and leaves the transaction as it was.
 01681:         """
+01682:         if self._complete:
  if (unlikely(__pyx_v_self->_complete)) {
/* … */
  }
+01683:             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(0, 1683, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
+01684:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1684, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1684, __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_Transaction_already_completed_ca_3};
      __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(0, 1683, __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(0, 1683, __pyx_L1_error)
 01685:                 'Transaction already completed, can\'t rollback.')
+01686:         if self._committing:
  if (unlikely(__pyx_v_self->_committing)) {
/* … */
  }
+01687:             raise QuestDBError(
    __pyx_t_3 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1687, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
+01688:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1688, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1688, __pyx_L1_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_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_6 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_4, __pyx_mstate_global->__pyx_kp_u_Transaction_commit_is_already_in_3};
      __pyx_t_1 = __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_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_1)) __PYX_ERR(0, 1687, __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(0, 1687, __pyx_L1_error)
 01689:                 "Transaction commit is already in progress, can't rollback.")
+01690:         self._sender._check_not_in_own_callback('transaction.rollback')
  __pyx_t_7 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self->_sender, __pyx_mstate_global->__pyx_kp_u_transaction_rollback, NULL); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1690, __pyx_L1_error)
 01691:         # A rollback from code running inside a `row()` or `dataframe()` on
 01692:         # this buffer is refused before anything changes: clearing there
 01693:         # would discard what that call is writing. Every call that would
 01694:         # change what an in-progress call writes is refused the same way.
+01695:         if self._sender._buffer is not None:
  __pyx_t_8 = (((PyObject *)__pyx_v_self->_sender->_buffer) != Py_None);
  if (__pyx_t_8) {
/* … */
  }
+01696:             self._sender._buffer._check_not_in_row('rollback')
    __pyx_t_7 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_self->_sender->_buffer, __pyx_mstate_global->__pyx_n_u_rollback, NULL); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1696, __pyx_L1_error)
+01697:         self._sender._in_txn = False
  __pyx_v_self->_sender->_in_txn = 0;
+01698:         self._complete = True
  __pyx_v_self->_complete = 1;
+01699:         if self._sender._buffer is not None:
  __pyx_t_8 = (((PyObject *)__pyx_v_self->_sender->_buffer) != Py_None);
  if (__pyx_t_8) {
/* … */
  }
+01700:             self._sender._buffer._clear_now()
    __pyx_f_7questdb_7_client_6Buffer__clear_now(__pyx_v_self->_sender->_buffer);
 01701: 
+01702: cdef class Buffer:
struct __pyx_vtabstruct_7questdb_7_client_Buffer {
  PyObject *(*_init_ilp_impl)(struct __pyx_obj_7questdb_7_client_Buffer *, enum line_sender_protocol_version, size_t, size_t);
  PyObject *(*_init_qwp_impl)(struct __pyx_obj_7questdb_7_client_Buffer *, size_t, size_t);
  __pyx_t_7questdb_7_client_void_int (*_check_impl)(struct __pyx_obj_7questdb_7_client_Buffer *);
  __pyx_t_7questdb_7_client_void_int (*_check_readable)(struct __pyx_obj_7questdb_7_client_Buffer *);
  void (*_begin_native_borrow)(struct __pyx_obj_7questdb_7_client_Buffer *, int);
  void (*_end_native_borrow)(struct __pyx_obj_7questdb_7_client_Buffer *, int);
  void (*_begin_frame_borrow)(struct __pyx_obj_7questdb_7_client_Buffer *);
  void (*_end_frame_borrow)(struct __pyx_obj_7questdb_7_client_Buffer *);
  int (*_reentered_from_frame)(struct __pyx_obj_7questdb_7_client_Buffer *);
  void (*_clear_now)(struct __pyx_obj_7questdb_7_client_Buffer *);
  void (*_leave_row)(struct __pyx_obj_7questdb_7_client_Buffer *);
  PyObject *(*_to_bytes)(struct __pyx_obj_7questdb_7_client_Buffer *);
  __pyx_t_7questdb_7_client_void_int (*_check_not_in_row)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_opt_args_7questdb_7_client_6Buffer__check_not_in_row *__pyx_optional_args);
  __pyx_t_7questdb_7_client_void_int (*_set_marker)(struct __pyx_obj_7questdb_7_client_Buffer *);
  __pyx_t_7questdb_7_client_void_int (*_rewind_to_marker)(struct __pyx_obj_7questdb_7_client_Buffer *);
  PyObject *(*_clear_marker)(struct __pyx_obj_7questdb_7_client_Buffer *);
  PyObject *(*_rewind_after_failure)(struct __pyx_obj_7questdb_7_client_Buffer *);
  __pyx_t_7questdb_7_client_void_int (*_table)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *);
  struct qdb_pystr_buf *(*_cleared_b)(struct __pyx_obj_7questdb_7_client_Buffer *);
  __pyx_t_7questdb_7_client_void_int (*_symbol)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
  __pyx_t_7questdb_7_client_void_int (*_column_bool)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, int);
  __pyx_t_7questdb_7_client_void_int (*_column_decimal)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
  __pyx_t_7questdb_7_client_void_int (*_require_qwp_column)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *);
  __pyx_t_7questdb_7_client_void_int (*_column_binary)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
  __pyx_t_7questdb_7_client_void_int (*_column_uuid)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
  __pyx_t_7questdb_7_client_void_int (*_column_ipv4)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
  __pyx_t_7questdb_7_client_void_int (*_column_char)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_Char *);
  __pyx_t_7questdb_7_client_void_int (*_column_date_millis)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_DateMillis *);
  __pyx_t_7questdb_7_client_void_int (*_column_long256)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_Long256 *);
  __pyx_t_7questdb_7_client_void_int (*_column_geohash)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_Geohash *);
  __pyx_t_7questdb_7_client_void_int (*_column_int)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
  __pyx_t_7questdb_7_client_void_int (*_column_i64)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, int64_t);
  __pyx_t_7questdb_7_client_void_int (*_column_f64)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, double);
  __pyx_t_7questdb_7_client_void_int (*_column_str)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
  __pyx_t_7questdb_7_client_void_int (*_column_ts_micros)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_TimestampMicros *);
  __pyx_t_7questdb_7_client_void_int (*_column_ts_nanos)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_TimestampNanos *);
  __pyx_t_7questdb_7_client_void_int (*_column_numpy)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyArrayObject *);
  __pyx_t_7questdb_7_client_void_int (*_column_dt)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyDateTime_DateTime *);
  __pyx_t_7questdb_7_client_void_int (*_column)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
  __pyx_t_7questdb_7_client_void_int (*_column_qwp_only)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
  __pyx_t_7questdb_7_client_void_int (*_may_trigger_row_complete)(struct __pyx_obj_7questdb_7_client_Buffer *);
  __pyx_t_7questdb_7_client_void_int (*_at_ts_us)(struct __pyx_obj_7questdb_7_client_Buffer *, struct __pyx_obj_7questdb_7_client_TimestampMicros *);
  __pyx_t_7questdb_7_client_void_int (*_at_ts_ns)(struct __pyx_obj_7questdb_7_client_Buffer *, struct __pyx_obj_7questdb_7_client_TimestampNanos *);
  __pyx_t_7questdb_7_client_void_int (*_at_dt)(struct __pyx_obj_7questdb_7_client_Buffer *, PyDateTime_DateTime *);
  __pyx_t_7questdb_7_client_void_int (*_at_now)(struct __pyx_obj_7questdb_7_client_Buffer *);
  __pyx_t_7questdb_7_client_void_int (*_at)(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *);
  __pyx_t_7questdb_7_client_void_int (*_row)(struct __pyx_obj_7questdb_7_client_Buffer *, int, PyObject *, struct __pyx_opt_args_7questdb_7_client_6Buffer__row *__pyx_optional_args);
};
static struct __pyx_vtabstruct_7questdb_7_client_Buffer *__pyx_vtabptr_7questdb_7_client_Buffer;
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Buffer__init_ilp_impl(struct __pyx_obj_7questdb_7_client_Buffer *, enum line_sender_protocol_version, size_t, size_t);
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Buffer__init_qwp_impl(struct __pyx_obj_7questdb_7_client_Buffer *, size_t, size_t);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__check_impl(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__check_readable(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Buffer__begin_native_borrow(struct __pyx_obj_7questdb_7_client_Buffer *, int);
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Buffer__end_native_borrow(struct __pyx_obj_7questdb_7_client_Buffer *, int);
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Buffer__begin_frame_borrow(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Buffer__end_frame_borrow(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Buffer__clear_now(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Buffer__leave_row(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Buffer__to_bytes(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_opt_args_7questdb_7_client_6Buffer__check_not_in_row *__pyx_optional_args);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__set_marker(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__rewind_to_marker(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Buffer__clear_marker(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Buffer__rewind_after_failure(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__table(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *);
static CYTHON_INLINE struct qdb_pystr_buf *__pyx_f_7questdb_7_client_6Buffer__cleared_b(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__symbol(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_bool(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, int);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_decimal(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__require_qwp_column(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_binary(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_uuid(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_ipv4(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_char(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_Char *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_date_millis(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_DateMillis *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_long256(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_Long256 *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_geohash(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_Geohash *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_int(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_i64(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, int64_t);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_f64(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, double);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_str(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_ts_micros(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_TimestampMicros *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_ts_nanos(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, struct __pyx_obj_7questdb_7_client_TimestampNanos *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_numpy(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyArrayObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_dt(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyDateTime_DateTime *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *, PyObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__may_trigger_row_complete(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__at_ts_us(struct __pyx_obj_7questdb_7_client_Buffer *, struct __pyx_obj_7questdb_7_client_TimestampMicros *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__at_ts_ns(struct __pyx_obj_7questdb_7_client_Buffer *, struct __pyx_obj_7questdb_7_client_TimestampNanos *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__at_dt(struct __pyx_obj_7questdb_7_client_Buffer *, PyDateTime_DateTime *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__at_now(struct __pyx_obj_7questdb_7_client_Buffer *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__at(struct __pyx_obj_7questdb_7_client_Buffer *, PyObject *);

 01703:     """
 01704:     Internal row-serialization buffer, managed by :class:`Sender <questdb.Sender>`.
 01705: 
 01706:     Kept importable as ``questdb.ingress.Buffer`` for legacy ILP/HTTP and
 01707:     ILP/TCP code that constructs buffers explicitly and flushes them via
 01708:     ``sender.flush(buffer)``.
 01709:     """
 01710:     cdef line_sender_buffer* _impl
 01711:     cdef qdb_pystr_buf* _b
 01712:     cdef size_t _init_buf_size
 01713:     cdef size_t _max_name_len
 01714:     cdef bint _qwp
 01715:     # Native calls borrowing this buffer, even when it is caller-owned:
 01716:     # 0 = none, > 0 = that many read-only (const) borrows, such as a
 01717:     # ``flush(buffer, clear=False)``; -1 = one borrow that may modify it.
 01718:     # Only updated while holding the GIL.
 01719:     cdef int _native_borrows
 01720:     # The thread serializing a frame into this buffer under an exclusive
 01721:     # borrow (`_begin_frame_borrow`), or 0. See `_reentered_from_frame`.
 01722:     cdef unsigned long _frame_thread
 01723:     cdef bint _marker_set
 01724:     cdef int _row_depth
 01725:     cdef object _row_complete_sender
 01726: 
+01727:     def __cinit__(self):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_6Buffer_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7questdb_7_client_6Buffer_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_6Buffer___cinit__(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self));

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

static int __pyx_pf_7questdb_7_client_6Buffer___cinit__(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+01728:         self._impl = NULL
  __pyx_v_self->_impl = NULL;
+01729:         self._b = NULL
  __pyx_v_self->_b = NULL;
+01730:         self._init_buf_size = 0
  __pyx_v_self->_init_buf_size = 0;
+01731:         self._max_name_len = 0
  __pyx_v_self->_max_name_len = 0;
+01732:         self._qwp = False
  __pyx_v_self->_qwp = 0;
+01733:         self._native_borrows = 0
  __pyx_v_self->_native_borrows = 0;
+01734:         self._frame_thread = 0
  __pyx_v_self->_frame_thread = 0;
+01735:         self._marker_set = False
  __pyx_v_self->_marker_set = 0;
+01736:         self._row_depth = 0
  __pyx_v_self->_row_depth = 0;
+01737:         self._row_complete_sender = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_row_complete_sender);
  __Pyx_DECREF(__pyx_v_self->_row_complete_sender);
  __pyx_v_self->_row_complete_sender = Py_None;
 01738: 
+01739:     def __init__(
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_6Buffer_3__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7questdb_7_client_6Buffer_3__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_protocol_version = 0;
  PyObject *__pyx_v_init_buf_size = 0;
  PyObject *__pyx_v_max_name_len = 0;
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (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_protocol_version,&__pyx_mstate_global->__pyx_n_u_init_buf_size,&__pyx_mstate_global->__pyx_n_u_max_name_len,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(0, 1739, __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(0, 1739, __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(0, 1739, __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(0, 1739, __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(0, 1739, __pyx_L3_error)
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_65536));
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_127));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 3, i); __PYX_ERR(0, 1739, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_VARARGS(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 1739, __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(0, 1739, __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(0, 1739, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_65536));
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_127));
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "protocol_version", 0) < (0)) __PYX_ERR(0, 1741, __pyx_L3_error)
    __pyx_v_protocol_version = ((PyObject*)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "init_buf_size", 0) < (0)) __PYX_ERR(0, 1742, __pyx_L3_error)
    __pyx_v_init_buf_size = ((PyObject*)values[1]);
    if (__Pyx_PyInt_FromNumber(&values[2], "max_name_len", 0) < (0)) __PYX_ERR(0, 1743, __pyx_L3_error)
    __pyx_v_max_name_len = ((PyObject*)values[2]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 3, __pyx_nargs); __PYX_ERR(0, 1739, __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.Buffer.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_protocol_version), (&PyLong_Type), 0, "protocol_version", 2))) __PYX_ERR(0, 1741, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_init_buf_size), (&PyLong_Type), 0, "init_buf_size", 2))) __PYX_ERR(0, 1742, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_max_name_len), (&PyLong_Type), 0, "max_name_len", 2))) __PYX_ERR(0, 1743, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_6Buffer_2__init__(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self), __pyx_v_protocol_version, __pyx_v_init_buf_size, __pyx_v_max_name_len);
  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_6Buffer_2__init__(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_protocol_version, PyObject *__pyx_v_init_buf_size, PyObject *__pyx_v_max_name_len) {
  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_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("questdb._client.Buffer.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01740:             self,
 01741:             protocol_version: int,
 01742:             init_buf_size: int=65536,
 01743:             max_name_len: int=127):
+01744:         if self._impl != NULL:
  __pyx_t_1 = (__pyx_v_self->_impl != NULL);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+01745:             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(0, 1745, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+01746:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1746, __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(0, 1746, __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_Buffer_is_already_initialized};
      __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(0, 1745, __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(0, 1745, __pyx_L1_error)
 01747:                 'Buffer is already initialized.')
+01748:         if protocol_version not in range(1, 4):
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&PyRange_Type)), __pyx_mstate_global->__pyx_tuple[11], NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1748, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_v_protocol_version, __pyx_t_2, Py_NE)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1748, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
/* … */
  __pyx_mstate_global->__pyx_tuple[11] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_int_1, __pyx_mstate_global->__pyx_int_4); if (unlikely(!__pyx_mstate_global->__pyx_tuple[11])) __PYX_ERR(0, 1748, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[11]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[11]);
+01749:             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(0, 1749, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
+01750:                 QuestDBErrorCode.ProtocolVersionError,
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1750, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_ProtocolVersionError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1750, __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_Invalid_protocol_version_Support};
      __pyx_t_2 = __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_2)) __PYX_ERR(0, 1749, __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(0, 1749, __pyx_L1_error)
 01751:                 'Invalid protocol version. Supported versions are 1-3.')
+01752:         self._init_ilp_impl(protocol_version, init_buf_size, max_name_len)
  __pyx_t_8 = ((enum line_sender_protocol_version)__Pyx_PyLong_As_enum__line_sender_protocol_version(__pyx_v_protocol_version)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1752, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyLong_As_size_t(__pyx_v_init_buf_size); if (unlikely((__pyx_t_7 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1752, __pyx_L1_error)
  __pyx_t_9 = __Pyx_PyLong_As_size_t(__pyx_v_max_name_len); if (unlikely((__pyx_t_9 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1752, __pyx_L1_error)
  __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__init_ilp_impl(__pyx_v_self, __pyx_t_8, __pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1752, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 01753: 
+01754:     @staticmethod
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_5_new_qwp(CYTHON_UNUSED 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_6Buffer_5_new_qwp = {"_new_qwp", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Buffer_5_new_qwp, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_5_new_qwp(CYTHON_UNUSED 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_init_buf_size = 0;
  PyObject *__pyx_v_max_name_len = 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("_new_qwp (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_init_buf_size,&__pyx_mstate_global->__pyx_n_u_max_name_len,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(0, 1754, __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(0, 1754, __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(0, 1754, __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, "_new_qwp", 0) < (0)) __PYX_ERR(0, 1754, __pyx_L3_error)
      if (!values[0]) values[0] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_65536));
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_127));
    } else {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1754, __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(0, 1754, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[0]) values[0] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_65536));
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_127));
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "init_buf_size", 0) < (0)) __PYX_ERR(0, 1756, __pyx_L3_error)
    __pyx_v_init_buf_size = ((PyObject*)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "max_name_len", 0) < (0)) __PYX_ERR(0, 1757, __pyx_L3_error)
    __pyx_v_max_name_len = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_new_qwp", 0, 0, 2, __pyx_nargs); __PYX_ERR(0, 1754, __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.Buffer._new_qwp", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_init_buf_size), (&PyLong_Type), 0, "init_buf_size", 2))) __PYX_ERR(0, 1756, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_max_name_len), (&PyLong_Type), 0, "max_name_len", 2))) __PYX_ERR(0, 1757, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_6Buffer_4_new_qwp(__pyx_v_init_buf_size, __pyx_v_max_name_len);
  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_6Buffer_4_new_qwp(PyObject *__pyx_v_init_buf_size, PyObject *__pyx_v_max_name_len) {
  struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buf = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client.Buffer._new_qwp", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_buf);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1754, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_init_buf_size, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 1754, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_max_name_len, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 1754, __pyx_L1_error)
  __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Buffer_5_new_qwp, __Pyx_CYFUNCTION_STATICMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer__new_qwp, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[185])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1754, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_25, __pyx_mstate_global->__pyx_tuple[34]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_25, __pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, __pyx_mstate_global->__pyx_n_u_new_qwp, __pyx_t_25) < (0)) __PYX_ERR(0, 1754, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __pyx_t_4 = NULL;
  __Pyx_GetNameInClass(__pyx_t_16, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, __pyx_mstate_global->__pyx_n_u_new_qwp); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1754, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_16};
    __pyx_t_25 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_staticmethod, __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_16); __pyx_t_16 = 0;
    if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1754, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_25);
  }
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, __pyx_mstate_global->__pyx_n_u_new_qwp, __pyx_t_25) < (0)) __PYX_ERR(0, 1754, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
/* … */
  __pyx_mstate_global->__pyx_tuple[34] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_int_65536, __pyx_mstate_global->__pyx_int_127); if (unlikely(!__pyx_mstate_global->__pyx_tuple[34])) __PYX_ERR(0, 1754, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[34]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[34]);
 01755:     def _new_qwp(
 01756:             init_buf_size: int=65536,
 01757:             max_name_len: int=127):
+01758:         cdef Buffer buf = Buffer.__new__(Buffer)
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_7questdb_7_client_Buffer(((PyTypeObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer), __pyx_mstate_global->__pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1758, __pyx_L1_error)
  __Pyx_GOTREF((PyObject *)__pyx_t_1);
  __pyx_v_buf = ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_1);
  __pyx_t_1 = 0;
+01759:         buf._init_qwp_impl(init_buf_size, max_name_len)
  __pyx_t_2 = __Pyx_PyLong_As_size_t(__pyx_v_init_buf_size); if (unlikely((__pyx_t_2 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1759, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyLong_As_size_t(__pyx_v_max_name_len); if (unlikely((__pyx_t_3 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1759, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__init_qwp_impl(__pyx_v_buf, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1759, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+01760:         return buf
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_buf);
  __pyx_r = ((PyObject *)__pyx_v_buf);
  goto __pyx_L0;
 01761: 
+01762:     cdef inline _init_ilp_impl(self, line_sender_protocol_version version, size_t init_buf_size, size_t max_name_len):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Buffer__init_ilp_impl(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, enum line_sender_protocol_version __pyx_v_version, size_t __pyx_v_init_buf_size, size_t __pyx_v_max_name_len) {
  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.Buffer._init_ilp_impl", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+01763:         self._impl = line_sender_buffer_with_max_name_len(version, max_name_len)
  __pyx_v_self->_impl = line_sender_buffer_with_max_name_len(__pyx_v_version, __pyx_v_max_name_len);
+01764:         self._b = qdb_pystr_buf_new()
  __pyx_v_self->_b = qdb_pystr_buf_new();
+01765:         reserve_buffer(self._impl, init_buf_size)
  __pyx_t_1 = __pyx_f_7questdb_7_client_reserve_buffer(__pyx_v_self->_impl, __pyx_v_init_buf_size); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1765, __pyx_L1_error)
+01766:         self._init_buf_size = init_buf_size
  __pyx_v_self->_init_buf_size = __pyx_v_init_buf_size;
+01767:         self._max_name_len = max_name_len
  __pyx_v_self->_max_name_len = __pyx_v_max_name_len;
+01768:         self._qwp = False
  __pyx_v_self->_qwp = 0;
+01769:         self._row_complete_sender = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_row_complete_sender);
  __Pyx_DECREF(__pyx_v_self->_row_complete_sender);
  __pyx_v_self->_row_complete_sender = Py_None;
 01770: 
+01771:     cdef inline _init_qwp_impl(self, size_t init_buf_size, size_t max_name_len):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Buffer__init_qwp_impl(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, size_t __pyx_v_init_buf_size, size_t __pyx_v_max_name_len) {
  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.Buffer._init_qwp_impl", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+01772:         self._impl = line_sender_buffer_new_qwp_with_max_name_len(max_name_len)
  __pyx_v_self->_impl = line_sender_buffer_new_qwp_with_max_name_len(__pyx_v_max_name_len);
+01773:         self._b = qdb_pystr_buf_new()
  __pyx_v_self->_b = qdb_pystr_buf_new();
+01774:         reserve_buffer(self._impl, init_buf_size)
  __pyx_t_1 = __pyx_f_7questdb_7_client_reserve_buffer(__pyx_v_self->_impl, __pyx_v_init_buf_size); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1774, __pyx_L1_error)
+01775:         self._init_buf_size = init_buf_size
  __pyx_v_self->_init_buf_size = __pyx_v_init_buf_size;
+01776:         self._max_name_len = max_name_len
  __pyx_v_self->_max_name_len = __pyx_v_max_name_len;
+01777:         self._qwp = True
  __pyx_v_self->_qwp = 1;
+01778:         self._row_complete_sender = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_row_complete_sender);
  __Pyx_DECREF(__pyx_v_self->_row_complete_sender);
  __pyx_v_self->_row_complete_sender = Py_None;
 01779: 
 01780: 
+01781:     def __dealloc__(self):
/* Python wrapper */
static void __pyx_pw_7questdb_7_client_6Buffer_7__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7questdb_7_client_6Buffer_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_6Buffer_6__dealloc__(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self));

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

static void __pyx_pf_7questdb_7_client_6Buffer_6__dealloc__(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
}
+01782:         self._row_complete_sender = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_row_complete_sender);
  __Pyx_DECREF(__pyx_v_self->_row_complete_sender);
  __pyx_v_self->_row_complete_sender = Py_None;
+01783:         qdb_pystr_buf_free(self._b)
  qdb_pystr_buf_free(__pyx_v_self->_b);
+01784:         line_sender_buffer_free(self._impl)
  line_sender_buffer_free(__pyx_v_self->_impl);
 01785: 
+01786:     cdef inline void_int _check_impl(self) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__check_impl(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
  __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_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("questdb._client.Buffer._check_impl", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01787:         """Check the buffer can be modified."""
+01788:         if self._native_borrows != 0 and not self._reentered_from_frame():
  __pyx_t_2 = (__pyx_v_self->_native_borrows != 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = ((struct __pyx_vtabstruct_7questdb_7_client_Buffer *)__pyx_v_self->__pyx_vtab)->_reentered_from_frame(__pyx_v_self); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 1788, __pyx_L1_error)
  __pyx_t_3 = (!__pyx_t_2);
  __pyx_t_1 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+01789:             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(0, 1789, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
+01790:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1790, __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(0, 1790, __pyx_L1_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_Buffer_cannot_be_modified_while};
      __pyx_t_4 = __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_4)) __PYX_ERR(0, 1789, __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(0, 1789, __pyx_L1_error)
 01791:                 'Buffer cannot be modified while a native call is using it.')
+01792:         if self._impl == NULL:
  __pyx_t_1 = (__pyx_v_self->_impl == NULL);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+01793:             raise QuestDBError(
    __pyx_t_6 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1793, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
+01794:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1794, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1794, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_9 = 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_9 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_Buffer_is_not_initialized};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __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_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1793, __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(0, 1793, __pyx_L1_error)
 01795:                 'Buffer is not initialized.')
 01796: 
+01797:     cdef inline void_int _check_readable(self) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__check_readable(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
  __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_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("questdb._client.Buffer._check_readable", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01798:         """Check the buffer can be read: read-only native borrows allowed."""
+01799:         if self._native_borrows < 0 and not self._reentered_from_frame():
  __pyx_t_2 = (__pyx_v_self->_native_borrows < 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = ((struct __pyx_vtabstruct_7questdb_7_client_Buffer *)__pyx_v_self->__pyx_vtab)->_reentered_from_frame(__pyx_v_self); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 1799, __pyx_L1_error)
  __pyx_t_3 = (!__pyx_t_2);
  __pyx_t_1 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+01800:             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(0, 1800, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
+01801:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1801, __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(0, 1801, __pyx_L1_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_Buffer_cannot_be_accessed_while};
      __pyx_t_4 = __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_4)) __PYX_ERR(0, 1800, __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(0, 1800, __pyx_L1_error)
 01802:                 'Buffer cannot be accessed while a native call is '
 01803:                 'modifying it.')
+01804:         if self._impl == NULL:
  __pyx_t_1 = (__pyx_v_self->_impl == NULL);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+01805:             raise QuestDBError(
    __pyx_t_6 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1805, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
+01806:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1806, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1806, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_9 = 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_9 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_Buffer_is_not_initialized};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __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_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1805, __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(0, 1805, __pyx_L1_error)
 01807:                 'Buffer is not initialized.')
 01808: 
+01809:     cdef inline void _begin_native_borrow(self, bint exclusive) noexcept:
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Buffer__begin_native_borrow(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, int __pyx_v_exclusive) {
/* … */
  /* function exit code */
}
 01810:         # Callers have already passed `_check_impl` (exclusive) or
 01811:         # `_check_readable` (shared), so the transition is always valid.
+01812:         if exclusive:
  if (__pyx_v_exclusive) {
/* … */
    goto __pyx_L3;
  }
+01813:             self._native_borrows = -1
    __pyx_v_self->_native_borrows = -1;
 01814:         else:
+01815:             self._native_borrows += 1
  /*else*/ {
    __pyx_v_self->_native_borrows = (__pyx_v_self->_native_borrows + 1);
  }
  __pyx_L3:;
 01816: 
+01817:     cdef inline void _end_native_borrow(self, bint exclusive) noexcept:
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Buffer__end_native_borrow(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, int __pyx_v_exclusive) {
/* … */
  /* function exit code */
}
+01818:         if exclusive:
  if (__pyx_v_exclusive) {
/* … */
    goto __pyx_L3;
  }
+01819:             self._native_borrows = 0
    __pyx_v_self->_native_borrows = 0;
 01820:         else:
+01821:             self._native_borrows -= 1
  /*else*/ {
    __pyx_v_self->_native_borrows = (__pyx_v_self->_native_borrows - 1);
  }
  __pyx_L3:;
 01822: 
+01823:     cdef inline void _begin_frame_borrow(self) noexcept:
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Buffer__begin_frame_borrow(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
/* … */
  /* function exit code */
}
 01824:         """Borrow the buffer exclusively for a frame serialized into it by
 01825:         `_dataframe` on this thread. Callers have passed `_check_impl`."""
+01826:         self._begin_native_borrow(True)
  __pyx_f_7questdb_7_client_6Buffer__begin_native_borrow(__pyx_v_self, 1);
+01827:         self._frame_thread = PyThread_get_thread_ident()
  __pyx_v_self->_frame_thread = PyThread_get_thread_ident();
 01828: 
+01829:     cdef inline void _end_frame_borrow(self) noexcept:
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Buffer__end_frame_borrow(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
/* … */
  /* function exit code */
}
+01830:         self._frame_thread = 0
  __pyx_v_self->_frame_thread = 0;
+01831:         self._end_native_borrow(True)
  __pyx_f_7questdb_7_client_6Buffer__end_native_borrow(__pyx_v_self, 1);
 01832: 
+01833:     cdef bint _reentered_from_frame(self) except -1:
static int __pyx_f_7questdb_7_client_6Buffer__reentered_from_frame(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client.Buffer._reentered_from_frame", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}
 01834:         """Whether this call comes back, from Python code the frame runs, into
 01835:         the `dataframe()` serializing into this buffer on this same thread.
 01836: 
 01837:         The frame borrow refuses every other thread: the serializer can
 01838:         release the GIL while it writes. On the serializing thread itself,
 01839:         Python runs only where the serializer has stopped to run it -- a
 01840:         cell's conversion, an `attrs` read, a `questdb` log record -- so
 01841:         while a row is being written (`_row_depth`) such a call meets the
 01842:         same rules as one re-entering `row()`: reads are answered and
 01843:         `_check_not_in_row` refuses what would change the buffer. An OIDC or
 01844:         token-provider callback on this thread is the exception: it runs
 01845:         inside a native call -- the frame's own auto-flush, say -- that may
 01846:         be using the sender and the buffer, so it stays refused.
 01847:         """
+01848:         if (self._frame_thread == 0
  __pyx_t_2 = (__pyx_v_self->_frame_thread == 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
/* … */
  if (__pyx_t_1) {
/* … */
  }
+01849:                 or self._row_depth == 0
  __pyx_t_2 = (__pyx_v_self->_row_depth == 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
+01850:                 or self._frame_thread != PyThread_get_thread_ident()):
  __pyx_t_2 = (__pyx_v_self->_frame_thread != PyThread_get_thread_ident());
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
+01851:             return False
    __pyx_r = 0;
    goto __pyx_L0;
+01852:         return not (_oidc_callback_on_this_thread()
  __pyx_t_2 = __pyx_f_7questdb_7_client__oidc_callback_on_this_thread(); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 1852, __pyx_L1_error)
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L7_bool_binop_done;
  }
/* … */
  __pyx_r = (!__pyx_t_1);
  goto __pyx_L0;
+01853:                     or _token_callback_on_this_thread())
  __pyx_t_2 = __pyx_f_7questdb_7_client__token_callback_on_this_thread();
  __pyx_t_1 = __pyx_t_2;
  __pyx_L7_bool_binop_done:;
 01854: 
+01855:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_13init_buf_size_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_13init_buf_size_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_6Buffer_13init_buf_size___get__(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_6Buffer_13init_buf_size___get__(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client.Buffer.init_buf_size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01856:     def init_buf_size(self) -> int:
 01857:         """
 01858:         The initial capacity of the buffer when first created.
 01859: 
 01860:         This may grow over time, see ``capacity()``.
 01861:         """
+01862:         return self._init_buf_size
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_FromSize_t(__pyx_v_self->_init_buf_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1862, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 01863: 
+01864:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_12max_name_len_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_12max_name_len_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_6Buffer_12max_name_len___get__(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_6Buffer_12max_name_len___get__(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client.Buffer.max_name_len.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01865:     def max_name_len(self) -> int:
 01866:         """Maximum length of a table or column name."""
+01867:         return self._max_name_len
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_FromSize_t(__pyx_v_self->_max_name_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1867, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 01868: 
+01869:     def reserve(self, additional):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_9reserve(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Buffer_8reserve, "\n        Ensure the buffer has at least `additional` bytes of future capacity.\n\n        :param int additional: Additional bytes to reserve.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Buffer_9reserve = {"reserve", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Buffer_9reserve, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Buffer_8reserve};
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_9reserve(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_additional = 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("reserve (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_additional,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(0, 1869, __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(0, 1869, __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, "reserve", 0) < (0)) __PYX_ERR(0, 1869, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("reserve", 1, 1, 1, i); __PYX_ERR(0, 1869, __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(0, 1869, __pyx_L3_error)
    }
    __pyx_v_additional = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("reserve", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1869, __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.Buffer.reserve", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_6Buffer_8reserve(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self), __pyx_v_additional);
  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_6Buffer_8reserve(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_additional) {
  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_3);
  __Pyx_AddTraceback("questdb._client.Buffer.reserve", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Buffer_9reserve, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer_reserve, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[186])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1869, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, __pyx_mstate_global->__pyx_n_u_reserve, __pyx_t_25) < (0)) __PYX_ERR(0, 1869, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 01870:         """
 01871:         Ensure the buffer has at least `additional` bytes of future capacity.
 01872: 
 01873:         :param int additional: Additional bytes to reserve.
 01874:         """
+01875:         if additional < 0:
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_additional, __pyx_mstate_global->__pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1875, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1875, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+01876:             raise ValueError('additional must be non-negative.')
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_additional_must_be_non_negative};
      __pyx_t_1 = __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;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1876, __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(0, 1876, __pyx_L1_error)
+01877:         self._check_impl()
  __pyx_t_5 = __pyx_f_7questdb_7_client_6Buffer__check_impl(__pyx_v_self); if (unlikely(__pyx_t_5 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1877, __pyx_L1_error)
+01878:         reserve_buffer(self._impl, additional)
  __pyx_t_4 = __Pyx_PyLong_As_size_t(__pyx_v_additional); if (unlikely((__pyx_t_4 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1878, __pyx_L1_error)
  __pyx_t_5 = __pyx_f_7questdb_7_client_reserve_buffer(__pyx_v_self->_impl, __pyx_t_4); if (unlikely(__pyx_t_5 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1878, __pyx_L1_error)
 01879: 
+01880:     def capacity(self) -> int:
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_11capacity(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Buffer_10capacity, "The current buffer capacity.");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Buffer_11capacity = {"capacity", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Buffer_11capacity, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Buffer_10capacity};
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_11capacity(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
) {
  #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("capacity (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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("capacity", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("capacity", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_6Buffer_10capacity(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_6Buffer_10capacity(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client.Buffer.capacity", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_25 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1880, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 1880, __pyx_L1_error)
  __pyx_t_16 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Buffer_11capacity, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer_capacity, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[187])); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1880, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_16);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_16, __pyx_t_25);
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, __pyx_mstate_global->__pyx_n_u_capacity, __pyx_t_16) < (0)) __PYX_ERR(0, 1880, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 01881:         """The current buffer capacity."""
+01882:         self._check_readable()
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__check_readable(__pyx_v_self); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1882, __pyx_L1_error)
+01883:         return line_sender_buffer_capacity(self._impl)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_FromSize_t(line_sender_buffer_capacity(__pyx_v_self->_impl)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1883, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_PyInt_FromNumber(&__pyx_t_2, NULL, 0) < (0)) __PYX_ERR(0, 1883, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;
 01884: 
+01885:     def clear(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_13clear(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Buffer_12clear, "\n        Reset the buffer.\n\n        Note that flushing a buffer will (unless otherwise specified)\n        also automatically clear it.\n\n        This method is designed to be called only in conjunction with\n        ``sender.flush(buffer, clear=False)``.\n\n        Raises :class:`QuestDBError <questdb.QuestDBError>`\n        (``InvalidApiCall``) if a\n        :func:`Buffer.row <questdb.ingress.Buffer.row>` or\n        :func:`Buffer.dataframe <questdb.ingress.Buffer.dataframe>` call\n        on this buffer is still in progress.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Buffer_13clear = {"clear", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Buffer_13clear, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Buffer_12clear};
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_13clear(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
) {
  #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("clear (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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("clear", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("clear", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_6Buffer_12clear(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_6Buffer_12clear(struct __pyx_obj_7questdb_7_client_Buffer *__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_AddTraceback("questdb._client.Buffer.clear", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_16 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Buffer_13clear, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer_clear, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[188])); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1885, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_16);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, __pyx_mstate_global->__pyx_n_u_clear, __pyx_t_16) < (0)) __PYX_ERR(0, 1885, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 01886:         """
 01887:         Reset the buffer.
 01888: 
 01889:         Note that flushing a buffer will (unless otherwise specified)
 01890:         also automatically clear it.
 01891: 
 01892:         This method is designed to be called only in conjunction with
 01893:         ``sender.flush(buffer, clear=False)``.
 01894: 
 01895:         Raises :class:`QuestDBError <questdb.QuestDBError>`
 01896:         (``InvalidApiCall``) if a
 01897:         :func:`Buffer.row <questdb.ingress.Buffer.row>` or
 01898:         :func:`Buffer.dataframe <questdb.ingress.Buffer.dataframe>` call
 01899:         on this buffer is still in progress.
 01900:         """
+01901:         self._check_impl()
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__check_impl(__pyx_v_self); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1901, __pyx_L1_error)
+01902:         self._check_not_in_row('clear')
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_clear, NULL); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1902, __pyx_L1_error)
+01903:         self._clear_now()
  __pyx_f_7questdb_7_client_6Buffer__clear_now(__pyx_v_self);
 01904: 
+01905:     cdef inline void _clear_now(self) noexcept:
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Buffer__clear_now(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
/* … */
  /* function exit code */
}
+01906:         line_sender_buffer_clear(self._impl)
  line_sender_buffer_clear(__pyx_v_self->_impl);
+01907:         qdb_pystr_buf_clear(self._b)
  qdb_pystr_buf_clear(__pyx_v_self->_b);
 01908: 
+01909:     cdef inline void _leave_row(self) noexcept:
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Buffer__leave_row(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
/* … */
  /* function exit code */
}
+01910:         self._row_depth -= 1
  __pyx_v_self->_row_depth = (__pyx_v_self->_row_depth - 1);
 01911: 
+01912:     def __len__(self) -> int:
/* Python wrapper */
static Py_ssize_t __pyx_pw_7questdb_7_client_6Buffer_15__len__(PyObject *__pyx_v_self); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Buffer_14__len__, "\n        The current number of bytes currently in the buffer, read mid-row\n        on the same terms as :func:`Buffer.__bytes__`.\n\n        For ILP buffers this is exact, and equivalent (but cheaper) to\n        ``len(bytes(buffer))``. For QWP buffers it is an estimate of the\n        encoded size. Over QWP/WebSocket it is never below the size of the\n        frame a flush encodes, unless store-and-forward has fallen back to\n        sending full symbol dictionaries.\n        ");
#if CYTHON_UPDATE_DESCRIPTOR_DOC
struct wrapperbase __pyx_wrapperbase_7questdb_7_client_6Buffer_14__len__;
#endif
static Py_ssize_t __pyx_pw_7questdb_7_client_6Buffer_15__len__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_6Buffer_14__len__(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self));

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

static Py_ssize_t __pyx_pf_7questdb_7_client_6Buffer_14__len__(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
  Py_ssize_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client.Buffer.__len__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}
 01913:         """
 01914:         The current number of bytes currently in the buffer, read mid-row
 01915:         on the same terms as :func:`Buffer.__bytes__`.
 01916: 
 01917:         For ILP buffers this is exact, and equivalent (but cheaper) to
 01918:         ``len(bytes(buffer))``. For QWP buffers it is an estimate of the
 01919:         encoded size. Over QWP/WebSocket it is never below the size of the
 01920:         frame a flush encodes, unless store-and-forward has fallen back to
 01921:         sending full symbol dictionaries.
 01922:         """
+01923:         self._check_readable()
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__check_readable(__pyx_v_self); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1923, __pyx_L1_error)
+01924:         return line_sender_buffer_size(self._impl)
  __pyx_r = line_sender_buffer_size(__pyx_v_self->_impl);
  goto __pyx_L0;
 01925: 
+01926:     def __bytes__(self) -> bytes:
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_17__bytes__(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Buffer_16__bytes__, "Return the constructed buffer as bytes. Use for debugging.\n\n        Read from inside a part-written row -- from a column value whose\n        conversion runs Python -- this returns the buffer as it stands,\n        so the last line has no terminator yet. That is deliberate: a\n        read changes nothing, and a snapshot of a buffer mid-row is an\n        honest answer to what the buffer holds at that moment. Every\n        call that would *act* on the buffer is refused there instead.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Buffer_17__bytes__ = {"__bytes__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Buffer_17__bytes__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Buffer_16__bytes__};
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_17__bytes__(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
) {
  #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("__bytes__ (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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__bytes__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__bytes__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_6Buffer_16__bytes__(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_6Buffer_16__bytes__(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client.Buffer.__bytes__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_16 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1926, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bytes) < (0)) __PYX_ERR(0, 1926, __pyx_L1_error)
  __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Buffer_17__bytes__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer___bytes, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[189])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1926, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_25, __pyx_t_16);
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, __pyx_mstate_global->__pyx_n_u_bytes_2, __pyx_t_25) < (0)) __PYX_ERR(0, 1926, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 01927:         """Return the constructed buffer as bytes. Use for debugging.
 01928: 
 01929:         Read from inside a part-written row -- from a column value whose
 01930:         conversion runs Python -- this returns the buffer as it stands,
 01931:         so the last line has no terminator yet. That is deliberate: a
 01932:         read changes nothing, and a snapshot of a buffer mid-row is an
 01933:         honest answer to what the buffer holds at that moment. Every
 01934:         call that would *act* on the buffer is refused there instead.
 01935:         """
+01936:         return self._to_bytes()
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__to_bytes(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1936, __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(0, 1936, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 01937: 
+01938:     cdef inline object _to_bytes(self):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Buffer__to_bytes(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
  struct line_sender_buffer_view __pyx_v_view;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client.Buffer._to_bytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+01939:         self._check_readable()
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__check_readable(__pyx_v_self); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 1939, __pyx_L1_error)
+01940:         cdef line_sender_buffer_view view = line_sender_buffer_peek(self._impl)
  __pyx_v_view = line_sender_buffer_peek(__pyx_v_self->_impl);
+01941:         return PyBytes_FromStringAndSize(<const char *> view.buf, <Py_ssize_t> view.len)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyBytes_FromStringAndSize(((char const *)__pyx_v_view.buf), ((Py_ssize_t)__pyx_v_view.len)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1941, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 01942: 
+01943:     cdef inline void_int _check_not_in_row(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_method, struct __pyx_opt_args_7questdb_7_client_6Buffer__check_not_in_row *__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_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("questdb._client.Buffer._check_not_in_row", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_7questdb_7_client_6Buffer__check_not_in_row {
  int __pyx_n;
  PyObject *hint;
};
+01944:             self, str method, str hint=None) except -1:
  PyObject *__pyx_v_hint = ((PyObject*)Py_None);
  __pyx_t_7questdb_7_client_void_int __pyx_r;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_hint = __pyx_optional_args->hint;
    }
  }
 01945:         """
 01946:         Refuse a call that arrives while a row is part-way through
 01947:         being written into this buffer.
 01948: 
 01949:         `row()` and the row-serializing `dataframe()` both hold a
 01950:         rewind point across values whose conversion runs Python code,
 01951:         and that code re-enters on the same thread, so nothing else
 01952:         stands between it and the buffer. The native buffer refuses a
 01953:         half-written row anyway; what it cannot do is stop the caller's
 01954:         own error handling from acting on the refusal.
 01955: 
 01956:         `hint` is a further sentence for the message, for a refused call
 01957:         with a remedy of its own.
 01958:         """
+01959:         if self._row_depth != 0:
  __pyx_t_1 = (__pyx_v_self->_row_depth != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+01960:             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(0, 1960, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+01961:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1961, __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(0, 1961, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+01962:                 f"{method}() can't be called while a row is being "
    __pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1962, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_while_a_row_is); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1962, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 01963:                 "written into this buffer. `row()` or `dataframe()` is "
 01964:                 "part-way through and something it called has come "
 01965:                 "back here, most likely a column value whose "
+01966:                 "conversion runs Python code." +
    __pyx_t_8 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlaceSafe(__pyx_t_7, __pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1966, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __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_8};
      __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_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1960, __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(0, 1960, __pyx_L1_error)
+01967:                 ("" if hint is None else " " + hint))
    __pyx_t_1 = (__pyx_v_hint == ((PyObject*)Py_None));
    if (__pyx_t_1) {
      __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u__7);
      __pyx_t_5 = __pyx_mstate_global->__pyx_kp_u__7;
    } else {
      __pyx_t_8 = __Pyx_PyUnicode_ConcatSafe(__pyx_mstate_global->__pyx_kp_u__19, __pyx_v_hint); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1967, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_5 = __pyx_t_8;
      __pyx_t_8 = 0;
    }
 01968: 
+01969:     cdef inline void_int _set_marker(self) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__set_marker(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
  struct line_sender_error *__pyx_v_err;
  __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_2);
  __Pyx_AddTraceback("questdb._client.Buffer._set_marker", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+01970:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+01971:         if not line_sender_buffer_set_marker(self._impl, &err):
  __pyx_t_1 = (!line_sender_buffer_set_marker(__pyx_v_self->_impl, (&__pyx_v_err)));
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+01972:             raise c_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1972, __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(0, 1972, __pyx_L1_error)
+01973:         self._marker_set = True
  __pyx_v_self->_marker_set = 1;
 01974: 
+01975:     cdef inline void_int _rewind_to_marker(self) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__rewind_to_marker(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
  struct line_sender_error *__pyx_v_err;
  __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_2);
  __Pyx_AddTraceback("questdb._client.Buffer._rewind_to_marker", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+01976:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 01977:         # The rewind point is spent either way: a successful rewind
 01978:         # consumes it, and a failed one leaves nothing worth keeping.
+01979:         self._marker_set = False
  __pyx_v_self->_marker_set = 0;
+01980:         if not line_sender_buffer_rewind_to_marker(self._impl, &err):
  __pyx_t_1 = (!line_sender_buffer_rewind_to_marker(__pyx_v_self->_impl, (&__pyx_v_err)));
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+01981:             raise c_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1981, __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(0, 1981, __pyx_L1_error)
 01982: 
+01983:     cdef inline _clear_marker(self):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Buffer__clear_marker(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+01984:         line_sender_buffer_clear_marker(self._impl)
  line_sender_buffer_clear_marker(__pyx_v_self->_impl);
+01985:         self._marker_set = False
  __pyx_v_self->_marker_set = 0;
 01986: 
+01987:     cdef inline _rewind_after_failure(self):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Buffer__rewind_after_failure(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
  struct line_sender_error *__pyx_v_err;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 01988:         """
 01989:         Drop the part-written row while an error is already on its way
 01990:         out to the caller.
 01991: 
 01992:         A flush the row itself triggered takes the rewind point with it,
 01993:         and so does anything that re-enters the buffer while the row is
 01994:         being assembled. Either way there is no rewind point left, the
 01995:         part-written row is gone with it, and the error already being
 01996:         raised is the one the caller needs to see.
 01997:         """
+01998:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+01999:         if not self._marker_set:
  __pyx_t_1 = (!__pyx_v_self->_marker_set);
  if (__pyx_t_1) {
/* … */
  }
+02000:             return
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+02001:         self._marker_set = False
  __pyx_v_self->_marker_set = 0;
+02002:         if not line_sender_buffer_rewind_to_marker(self._impl, &err):
  __pyx_t_1 = (!line_sender_buffer_rewind_to_marker(__pyx_v_self->_impl, (&__pyx_v_err)));
  if (__pyx_t_1) {
/* … */
  }
+02003:             line_sender_error_free(err)
    line_sender_error_free(__pyx_v_err);
 02004: 
+02005:     cdef inline void_int _table(self, str table_name) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__table(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_table_name) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_table_name __pyx_v_c_table_name;
  __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_AddTraceback("questdb._client.Buffer._table", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+02006:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 02007:         cdef line_sender_table_name c_table_name
+02008:         str_to_table_name(
  __pyx_t_2 = __pyx_f_7questdb_7_client_str_to_table_name(__pyx_t_1, ((PyObject *)__pyx_v_table_name), (&__pyx_v_c_table_name)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2008, __pyx_L1_error)
+02009:             self._cleared_b(), <PyObject*>table_name, &c_table_name)
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2009, __pyx_L1_error)
+02010:         if not line_sender_buffer_table(self._impl, c_table_name, &err):
  __pyx_t_3 = (!line_sender_buffer_table(__pyx_v_self->_impl, __pyx_v_c_table_name, (&__pyx_v_err)));
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+02011:             raise c_err_to_py(err)
    __pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2011, __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(0, 2011, __pyx_L1_error)
 02012: 
+02013:     cdef inline qdb_pystr_buf* _cleared_b(self):
static CYTHON_INLINE struct qdb_pystr_buf *__pyx_f_7questdb_7_client_6Buffer__cleared_b(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
  struct qdb_pystr_buf *__pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+02014:         qdb_pystr_buf_clear(self._b)
  qdb_pystr_buf_clear(__pyx_v_self->_b);
+02015:         return self._b
  __pyx_r = __pyx_v_self->_b;
  goto __pyx_L0;
 02016: 
+02017:     cdef inline void_int _symbol(self, str name, str value) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__symbol(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_column_name __pyx_v_c_name;
  struct line_sender_utf8 __pyx_v_c_value;
  __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_AddTraceback("questdb._client.Buffer._symbol", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+02018:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 02019:         cdef line_sender_column_name c_name
 02020:         cdef line_sender_utf8 c_value
+02021:         str_to_column_name(self._cleared_b(), name, &c_name)
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2021, __pyx_L1_error)
  __pyx_t_2 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_1, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2021, __pyx_L1_error)
+02022:         str_to_utf8(self._b, <PyObject*>value, &c_value)
  __pyx_t_2 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_self->_b, ((PyObject *)__pyx_v_value), (&__pyx_v_c_value)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2022, __pyx_L1_error)
+02023:         if not line_sender_buffer_symbol(self._impl, c_name, c_value, &err):
  __pyx_t_3 = (!line_sender_buffer_symbol(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_c_value, (&__pyx_v_err)));
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+02024:             raise c_err_to_py(err)
    __pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2024, __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(0, 2024, __pyx_L1_error)
 02025: 
+02026:     cdef inline void_int _column_bool(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_bool(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, int __pyx_v_value) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_column_name __pyx_v_c_name;
  __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_AddTraceback("questdb._client.Buffer._column_bool", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02027:             self, str name, bint value) except -1:
+02028:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 02029:         cdef line_sender_column_name c_name
+02030:         str_to_column_name(self._cleared_b(), name, &c_name)
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2030, __pyx_L1_error)
  __pyx_t_2 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_1, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2030, __pyx_L1_error)
+02031:         if not line_sender_buffer_column_bool(self._impl, c_name, value, &err):
  __pyx_t_3 = (!line_sender_buffer_column_bool(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_value, (&__pyx_v_err)));
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+02032:             raise c_err_to_py(err)
    __pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2032, __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(0, 2032, __pyx_L1_error)
 02033: 
+02034:     cdef inline void_int _column_decimal(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_decimal(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
  struct line_sender_column_name __pyx_v_c_name;
  __pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client.Buffer._column_decimal", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}
 02035:             self, str name, object value) except -1:
 02036:         cdef line_sender_column_name c_name
+02037:         str_to_column_name(self._cleared_b(), name, &c_name)
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2037, __pyx_L1_error)
  __pyx_t_2 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_1, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2037, __pyx_L1_error)
+02038:         return serialize_decimal_py_obj(self._impl, c_name, <PyObject*>value)
  __pyx_t_2 = __pyx_f_7questdb_7_client_serialize_decimal_py_obj(__pyx_v_self->_impl, __pyx_v_c_name, ((PyObject *)__pyx_v_value)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2038, __pyx_L1_error)
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;
 02039: 
+02040:     cdef inline void_int _require_qwp_column(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__require_qwp_column(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_type_name) {
  __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_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_AddTraceback("questdb._client.Buffer._require_qwp_column", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02041:             self, str type_name) except -1:
+02042:         if not self._qwp:
  __pyx_t_1 = (!__pyx_v_self->_qwp);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+02043:             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(0, 2043, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+02044:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2044, __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(0, 2044, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+02045:                 f"{type_name} columns require a QWP sender "
    __pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_type_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2045, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_columns_require_a_QWP_sender_pr); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2045, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_8 = 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_8 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_t_7};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__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_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2043, __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(0, 2043, __pyx_L1_error)
 02046:                 "(protocol 'udp', 'ws' or 'wss'); this buffer uses "
 02047:                 "the ILP protocol (tcp/tcps/http/https).")
 02048: 
+02049:     cdef inline void_int _column_binary(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_binary(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_column_name __pyx_v_c_name;
  uint8_t const *__pyx_v_data;
  size_t __pyx_v_data_len;
  Py_buffer __pyx_v_view;
  int __pyx_v_release_view;
  __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_7);
  __Pyx_AddTraceback("questdb._client.Buffer._column_binary", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02050:             self, str name, object value) except -1:
+02051:         self._require_qwp_column('BINARY')
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__require_qwp_column(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_BINARY); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2051, __pyx_L1_error)
+02052:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 02053:         cdef line_sender_column_name c_name
 02054:         cdef const uint8_t* data
 02055:         cdef size_t data_len
 02056:         cdef Py_buffer view
+02057:         cdef bint release_view = False
  __pyx_v_release_view = 0;
+02058:         if isinstance(value, bytes):
  __pyx_t_2 = PyBytes_Check(__pyx_v_value); 
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+02059:             data = <const uint8_t*>PyBytes_AsString(value)
    __pyx_t_3 = PyBytes_AsString(__pyx_v_value); if (unlikely(__pyx_t_3 == ((void *)NULL))) __PYX_ERR(0, 2059, __pyx_L1_error)
    __pyx_v_data = ((uint8_t const *)__pyx_t_3);
+02060:             data_len = <size_t>PyBytes_GET_SIZE(value)
    __pyx_v_data_len = ((size_t)PyBytes_GET_SIZE(__pyx_v_value));
+02061:         elif isinstance(value, bytearray):
  __pyx_t_2 = PyByteArray_Check(__pyx_v_value); 
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+02062:             data = <const uint8_t*>PyByteArray_AsString(value)
    __pyx_v_data = ((uint8_t const *)PyByteArray_AsString(__pyx_v_value));
+02063:             data_len = <size_t>PyByteArray_Size(value)
    __pyx_v_data_len = ((size_t)PyByteArray_Size(__pyx_v_value));
 02064:         else:
+02065:             if value.itemsize != 1 or not value.c_contiguous:
  /*else*/ {
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_mstate_global->__pyx_n_u_itemsize); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2065, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = (__Pyx_PyLong_BoolNeObjC(__pyx_t_4, __pyx_mstate_global->__pyx_int_1, 1, 0)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 2065, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (!__pyx_t_5) {
    } else {
      __pyx_t_2 = __pyx_t_5;
      goto __pyx_L5_bool_binop_done;
    }
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_mstate_global->__pyx_n_u_c_contiguous); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2065, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 2065, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_6 = (!__pyx_t_5);
    __pyx_t_2 = __pyx_t_6;
    __pyx_L5_bool_binop_done:;
    if (unlikely(__pyx_t_2)) {
/* … */
    }
+02066:                 raise ValueError(
      __pyx_t_7 = NULL;
      __pyx_t_8 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_memoryview_BINARY_values_must_be};
        __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2066, __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(0, 2066, __pyx_L1_error)
 02067:                     'memoryview BINARY values must be C-contiguous with '
 02068:                     'one-byte items.')
+02069:             PyObject_GetBuffer(value, &view, PyBUF_SIMPLE)
    __pyx_t_9 = PyObject_GetBuffer(__pyx_v_value, (&__pyx_v_view), PyBUF_SIMPLE); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 2069, __pyx_L1_error)
+02070:             release_view = True
    __pyx_v_release_view = 1;
+02071:             data = <const uint8_t*>view.buf
    __pyx_v_data = ((uint8_t const *)__pyx_v_view.buf);
+02072:             data_len = <size_t>view.len
    __pyx_v_data_len = ((size_t)__pyx_v_view.len);
  }
  __pyx_L3:;
+02073:         try:
  /*try:*/ {
+02074:             str_to_column_name(self._cleared_b(), name, &c_name)
    __pyx_t_10 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2074, __pyx_L8_error)
    __pyx_t_1 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_10, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2074, __pyx_L8_error)
+02075:             if not line_sender_buffer_column_binary(
    __pyx_t_2 = (!line_sender_buffer_column_binary(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_data, __pyx_v_data_len, (&__pyx_v_err)));
    if (unlikely(__pyx_t_2)) {
/* … */
    }
  }
 02076:                     self._impl, c_name, data, data_len, &err):
+02077:                 raise c_err_to_py(err)
      __pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2077, __pyx_L8_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(0, 2077, __pyx_L8_error)
 02078:         finally:
+02079:             if release_view:
  /*finally:*/ {
    /*normal exit:*/{
      if (__pyx_v_release_view) {
/* … */
      }
      goto __pyx_L9;
    }
    __pyx_L8_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __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_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 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_9 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_12 = __pyx_filename;
      {
        if (__pyx_v_release_view) {
/* … */
        }
      }
      __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_9; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_12;
      goto __pyx_L1_error;
    }
    __pyx_L9:;
  }
+02080:                 PyBuffer_Release(&view)
        PyBuffer_Release((&__pyx_v_view));
/* … */
          PyBuffer_Release((&__pyx_v_view));
 02081: 
+02082:     cdef inline void_int _column_uuid(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_uuid(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_column_name __pyx_v_c_name;
  PyObject *__pyx_v_be_bytes = 0;
  char *__pyx_v_be;
  uint64_t __pyx_v_hi_raw;
  uint64_t __pyx_v_lo_raw;
  uint64_t __pyx_v_hi;
  uint64_t __pyx_v_lo;
  __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_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb._client.Buffer._column_uuid", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_be_bytes);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02083:             self, str name, object value) except -1:
+02084:         self._require_qwp_column('UUID')
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__require_qwp_column(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_UUID); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2084, __pyx_L1_error)
+02085:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 02086:         cdef line_sender_column_name c_name
 02087:         # Reading `value.int` runs Python code: `UUID` accepts subclasses and
 02088:         # a subclass may define `int` as a property. That code can recycle
 02089:         # the string arena an encoded column name borrows from, so the value
 02090:         # is reduced to C scalars first and the name is encoded after.
 02091:         #
 02092:         # `int.to_bytes` is called unbound, so a replaced `UUID.int`
 02093:         # cannot narrow the result: it is always the 16 bytes
 02094:         # `UUID.bytes` would give, in one C-implemented call rather than
 02095:         # the two Python integers a mask and a shift would allocate.
+02096:         cdef bytes be_bytes = _INT_TO_BYTES(value.int, 16, 'big')
  __pyx_t_3 = NULL;
  __Pyx_INCREF(__pyx_v_7questdb_7_client__INT_TO_BYTES);
  __pyx_t_4 = __pyx_v_7questdb_7_client__INT_TO_BYTES; 
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_mstate_global->__pyx_n_u_int); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2096, __pyx_L1_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[4] = {__pyx_t_3, __pyx_t_5, __pyx_mstate_global->__pyx_int_16, __pyx_mstate_global->__pyx_n_u_big};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_6, (4-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 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(0, 2096, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  if (!(likely(PyBytes_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_2))) __PYX_ERR(0, 2096, __pyx_L1_error)
  __pyx_v_be_bytes = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+02097:         cdef char* be = PyBytes_AsString(be_bytes)
  __pyx_t_7 = PyBytes_AsString(__pyx_v_be_bytes); if (unlikely(__pyx_t_7 == ((void *)NULL))) __PYX_ERR(0, 2097, __pyx_L1_error)
  __pyx_v_be = __pyx_t_7;
 02098:         cdef uint64_t hi_raw
 02099:         cdef uint64_t lo_raw
+02100:         memcpy(&hi_raw, be, 8)
  (void)(memcpy((&__pyx_v_hi_raw), __pyx_v_be, 8));
+02101:         memcpy(&lo_raw, be + 8, 8)
  (void)(memcpy((&__pyx_v_lo_raw), (__pyx_v_be + 8), 8));
+02102:         cdef uint64_t hi = bswap64(hi_raw)
  __pyx_v_hi = __pyx_f_7questdb_7_client_bswap64(__pyx_v_hi_raw);
+02103:         cdef uint64_t lo = bswap64(lo_raw)
  __pyx_v_lo = __pyx_f_7questdb_7_client_bswap64(__pyx_v_lo_raw);
+02104:         str_to_column_name(self._cleared_b(), name, &c_name)
  __pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2104, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_8, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2104, __pyx_L1_error)
+02105:         if not line_sender_buffer_column_uuid(
  __pyx_t_9 = (!line_sender_buffer_column_uuid(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_lo, __pyx_v_hi, (&__pyx_v_err)));
  if (unlikely(__pyx_t_9)) {
/* … */
  }
 02106:                 self._impl, c_name, lo, hi, &err):
+02107:             raise c_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2107, __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(0, 2107, __pyx_L1_error)
 02108: 
+02109:     cdef inline void_int _column_ipv4(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_ipv4(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_column_name __pyx_v_c_name;
  uint32_t __pyx_v_bits;
  __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_2);
  __Pyx_AddTraceback("questdb._client.Buffer._column_ipv4", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02110:             self, str name, object value) except -1:
+02111:         self._require_qwp_column('IPV4')
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__require_qwp_column(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_IPV4); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2111, __pyx_L1_error)
+02112:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 02113:         cdef line_sender_column_name c_name
 02114:         # `IPv4Address.__int__` is pure Python and can recycle the string
 02115:         # arena an encoded column name borrows from, so the value is reduced
 02116:         # to a C scalar first and the name is encoded after.
+02117:         cdef uint32_t bits = <uint32_t>int(value)
  __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2117, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyLong_As_uint32_t(__pyx_t_2); if (unlikely((__pyx_t_3 == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2117, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_bits = ((uint32_t)__pyx_t_3);
+02118:         str_to_column_name(self._cleared_b(), name, &c_name)
  __pyx_t_4 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2118, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_4, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2118, __pyx_L1_error)
+02119:         if not line_sender_buffer_column_ipv4(
  __pyx_t_5 = (!line_sender_buffer_column_ipv4(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_bits, (&__pyx_v_err)));
  if (unlikely(__pyx_t_5)) {
/* … */
  }
 02120:                 self._impl, c_name, bits, &err):
+02121:             raise c_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2121, __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(0, 2121, __pyx_L1_error)
 02122: 
+02123:     cdef inline void_int _column_char(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_char(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, struct __pyx_obj_7questdb_7_client_Char *__pyx_v_value) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_column_name __pyx_v_c_name;
  __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_AddTraceback("questdb._client.Buffer._column_char", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02124:             self, str name, Char value) except -1:
+02125:         self._require_qwp_column('CHAR')
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__require_qwp_column(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_CHAR); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2125, __pyx_L1_error)
+02126:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 02127:         cdef line_sender_column_name c_name
+02128:         str_to_column_name(self._cleared_b(), name, &c_name)
  __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2128, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_2, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2128, __pyx_L1_error)
+02129:         if not line_sender_buffer_column_char(
  __pyx_t_3 = (!line_sender_buffer_column_char(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_value->_value, (&__pyx_v_err)));
  if (unlikely(__pyx_t_3)) {
/* … */
  }
 02130:                 self._impl, c_name, value._value, &err):
+02131:             raise c_err_to_py(err)
    __pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2131, __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(0, 2131, __pyx_L1_error)
 02132: 
+02133:     cdef inline void_int _column_date_millis(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_date_millis(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, struct __pyx_obj_7questdb_7_client_DateMillis *__pyx_v_value) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_column_name __pyx_v_c_name;
  __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_AddTraceback("questdb._client.Buffer._column_date_millis", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02134:             self, str name, DateMillis value) except -1:
+02135:         self._require_qwp_column('DATE')
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__require_qwp_column(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_DATE); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2135, __pyx_L1_error)
+02136:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 02137:         cdef line_sender_column_name c_name
+02138:         str_to_column_name(self._cleared_b(), name, &c_name)
  __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2138, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_2, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2138, __pyx_L1_error)
+02139:         if not line_sender_buffer_column_date(
  __pyx_t_3 = (!line_sender_buffer_column_date(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_value->_value, (&__pyx_v_err)));
  if (unlikely(__pyx_t_3)) {
/* … */
  }
 02140:                 self._impl, c_name, value._value, &err):
+02141:             raise c_err_to_py(err)
    __pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2141, __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(0, 2141, __pyx_L1_error)
 02142: 
+02143:     cdef inline void_int _column_long256(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_long256(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, struct __pyx_obj_7questdb_7_client_Long256 *__pyx_v_value) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_column_name __pyx_v_c_name;
  __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_3);
  __Pyx_AddTraceback("questdb._client.Buffer._column_long256", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02144:             self, str name, Long256 value) except -1:
+02145:         self._require_qwp_column('LONG256')
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__require_qwp_column(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_LONG256); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2145, __pyx_L1_error)
+02146:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 02147:         cdef line_sender_column_name c_name
+02148:         str_to_column_name(self._cleared_b(), name, &c_name)
  __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2148, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_2, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2148, __pyx_L1_error)
+02149:         if not line_sender_buffer_column_long256(
  __pyx_t_5 = (!line_sender_buffer_column_long256(__pyx_v_self->_impl, __pyx_v_c_name, ((uint8_t const *)__pyx_t_4), (&__pyx_v_err)));
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(__pyx_t_5)) {
/* … */
  }
 02150:                 self._impl, c_name,
+02151:                 <const uint8_t*>PyBytes_AsString(value._bytes), &err):
  __pyx_t_3 = __pyx_v_value->_bytes;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = PyBytes_AsString(__pyx_t_3); if (unlikely(__pyx_t_4 == ((void *)NULL))) __PYX_ERR(0, 2151, __pyx_L1_error)
+02152:             raise c_err_to_py(err)
    __pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2152, __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(0, 2152, __pyx_L1_error)
 02153: 
+02154:     cdef inline void_int _column_geohash(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_geohash(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, struct __pyx_obj_7questdb_7_client_Geohash *__pyx_v_value) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_column_name __pyx_v_c_name;
  __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_AddTraceback("questdb._client.Buffer._column_geohash", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02155:             self, str name, Geohash value) except -1:
+02156:         self._require_qwp_column('GEOHASH')
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__require_qwp_column(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_GEOHASH); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2156, __pyx_L1_error)
+02157:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 02158:         cdef line_sender_column_name c_name
+02159:         str_to_column_name(self._cleared_b(), name, &c_name)
  __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2159, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_2, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2159, __pyx_L1_error)
+02160:         if not line_sender_buffer_column_geohash(
  __pyx_t_3 = (!line_sender_buffer_column_geohash(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_value->_bits, __pyx_v_value->_precision, (&__pyx_v_err)));
  if (unlikely(__pyx_t_3)) {
/* … */
  }
 02161:                 self._impl, c_name, value._bits, value._precision, &err):
+02162:             raise c_err_to_py(err)
    __pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2162, __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(0, 2162, __pyx_L1_error)
 02163: 
+02164:     cdef inline void_int _column_int(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_int(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
  int __pyx_v_overflow;
  int64_t __pyx_v_as_i64;
  __pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
  /* 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_AddTraceback("questdb._client.Buffer._column_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02165:             self, str name, object value) except -1:
 02166:         # A plain `int` goes to a LONG column, which holds 64 bits. A
 02167:         # wider value fits only in a LONG256 column, and the `Long256`
 02168:         # wrapper is what puts it there, so the error names the wrapper.
 02169:         # `PyLong_AsLongLongAndOverflow` sets a flag instead of raising,
 02170:         # which is what lets the message be written here.
 02171:         #
 02172:         # Only QWP senders have a LONG256 column. On an ILP buffer there
 02173:         # is nothing to point the user at, so the value goes straight to
 02174:         # `_column_i64` and the coercion to `int64_t` raises.
+02175:         cdef int overflow = 0
  __pyx_v_overflow = 0;
 02176:         cdef int64_t as_i64
+02177:         if not self._qwp:
  __pyx_t_1 = (!__pyx_v_self->_qwp);
  if (__pyx_t_1) {
/* … */
  }
+02178:             return self._column_i64(name, value)
    __pyx_t_2 = __Pyx_PyLong_As_int64_t(__pyx_v_value); if (unlikely((__pyx_t_2 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2178, __pyx_L1_error)
    __pyx_t_3 = __pyx_f_7questdb_7_client_6Buffer__column_i64(__pyx_v_self, __pyx_v_name, __pyx_t_2); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2178, __pyx_L1_error)
    __pyx_r = __pyx_t_3;
    goto __pyx_L0;
+02179:         as_i64 = <int64_t>PyLong_AsLongLongAndOverflow(value, &overflow)
  __pyx_t_4 = PyLong_AsLongLongAndOverflow(__pyx_v_value, (&__pyx_v_overflow)); if (unlikely(__pyx_t_4 == ((PY_LONG_LONG)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 2179, __pyx_L1_error)
  __pyx_v_as_i64 = ((int64_t)__pyx_t_4);
+02180:         if overflow < 0:
  __pyx_t_1 = (__pyx_v_overflow < 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+02181:             raise OverflowError(
    __pyx_t_6 = NULL;
+02182:                 f'Bad column {name!r}: integer is below the minimum for a '
    __pyx_t_7 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2182, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
    __pyx_t_8[1] = __pyx_t_7;
    __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u_integer_is_below_the_minimum_fo;
    __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_8, 3, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7) + 112, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7));
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2182, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_10 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_9};
      __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_OverflowError)), __pyx_callargs+__pyx_t_10, (2-__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;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2181, __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(0, 2181, __pyx_L1_error)
 02183:                 f'LONG column (-2**63). LONG256 is unsigned and cannot '
 02184:                 f'store negative values.')
+02185:         if overflow > 0:
  __pyx_t_1 = (__pyx_v_overflow > 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+02186:             raise OverflowError(
    __pyx_t_9 = NULL;
+02187:                 f'Bad column {name!r}: integer out of range for a LONG '
    __pyx_t_6 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2187, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
    __pyx_t_8[1] = __pyx_t_6;
    __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u_integer_out_of_range_for_a_LONG;
    __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_8, 3, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6) + 120, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6));
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2187, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_10 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_7};
      __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_OverflowError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__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_5)) __PYX_ERR(0, 2186, __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(0, 2186, __pyx_L1_error)
 02188:                 f'column (-2**63 .. 2**63-1). Wrap it in `Long256(...)` '
 02189:                 f'to store it in a LONG256 column.')
+02190:         return self._column_i64(name, as_i64)
  __pyx_t_3 = __pyx_f_7questdb_7_client_6Buffer__column_i64(__pyx_v_self, __pyx_v_name, __pyx_v_as_i64); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2190, __pyx_L1_error)
  __pyx_r = __pyx_t_3;
  goto __pyx_L0;
 02191: 
+02192:     cdef inline void_int _column_i64(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_i64(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, int64_t __pyx_v_value) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_column_name __pyx_v_c_name;
  __pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client.Buffer._column_i64", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02193:             self, str name, int64_t value) except -1:
+02194:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 02195:         cdef line_sender_column_name c_name
+02196:         str_to_column_name(self._cleared_b(), name, &c_name)
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2196, __pyx_L1_error)
  __pyx_t_2 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_1, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2196, __pyx_L1_error)
+02197:         if not line_sender_buffer_column_i64(self._impl, c_name, value, &err):
  __pyx_t_3 = (!line_sender_buffer_column_i64(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_value, (&__pyx_v_err)));
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+02198:             raise c_err_to_py(err)
    __pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2198, __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(0, 2198, __pyx_L1_error)
+02199:         return 0
  __pyx_r = 0;
  goto __pyx_L0;
 02200: 
+02201:     cdef inline void_int _column_f64(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_f64(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, double __pyx_v_value) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_column_name __pyx_v_c_name;
  __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_AddTraceback("questdb._client.Buffer._column_f64", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02202:             self, str name, double value) except -1:
+02203:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 02204:         cdef line_sender_column_name c_name
+02205:         str_to_column_name(self._cleared_b(), name, &c_name)
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2205, __pyx_L1_error)
  __pyx_t_2 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_1, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2205, __pyx_L1_error)
+02206:         if not line_sender_buffer_column_f64(self._impl, c_name, value, &err):
  __pyx_t_3 = (!line_sender_buffer_column_f64(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_value, (&__pyx_v_err)));
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+02207:             raise c_err_to_py(err)
    __pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2207, __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(0, 2207, __pyx_L1_error)
 02208: 
+02209:     cdef inline void_int _column_str(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_str(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_column_name __pyx_v_c_name;
  struct line_sender_utf8 __pyx_v_c_value;
  __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_AddTraceback("questdb._client.Buffer._column_str", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02210:             self, str name, str value) except -1:
+02211:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 02212:         cdef line_sender_column_name c_name
 02213:         cdef line_sender_utf8 c_value
 02214:         # The name is encoded first because `_cleared_b()` recycles the
 02215:         # arena; the value is appended after it, and an append leaves
 02216:         # every pointer already handed out where it is.
+02217:         str_to_column_name(self._cleared_b(), name, &c_name)
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2217, __pyx_L1_error)
  __pyx_t_2 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_1, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2217, __pyx_L1_error)
+02218:         str_to_utf8(self._b, <PyObject*>value, &c_value)
  __pyx_t_2 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_self->_b, ((PyObject *)__pyx_v_value), (&__pyx_v_c_value)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2218, __pyx_L1_error)
+02219:         if not line_sender_buffer_column_str(self._impl, c_name, c_value, &err):
  __pyx_t_3 = (!line_sender_buffer_column_str(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_c_value, (&__pyx_v_err)));
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+02220:             raise c_err_to_py(err)
    __pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2220, __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(0, 2220, __pyx_L1_error)
 02221: 
+02222:     cdef inline void_int _column_ts_micros(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_ts_micros(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, struct __pyx_obj_7questdb_7_client_TimestampMicros *__pyx_v_ts) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_column_name __pyx_v_c_name;
  __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_AddTraceback("questdb._client.Buffer._column_ts_micros", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02223:             self, str name, TimestampMicros ts) except -1:
+02224:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 02225:         cdef line_sender_column_name c_name
+02226:         str_to_column_name(self._cleared_b(), name, &c_name)
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2226, __pyx_L1_error)
  __pyx_t_2 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_1, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2226, __pyx_L1_error)
+02227:         if not line_sender_buffer_column_ts_micros(self._impl, c_name, ts._value, &err):
  __pyx_t_3 = (!line_sender_buffer_column_ts_micros(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_ts->_value, (&__pyx_v_err)));
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+02228:             raise c_err_to_py(err)
    __pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2228, __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(0, 2228, __pyx_L1_error)
 02229: 
+02230:     cdef inline void_int _column_ts_nanos(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_ts_nanos(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, struct __pyx_obj_7questdb_7_client_TimestampNanos *__pyx_v_ts) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_column_name __pyx_v_c_name;
  __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_AddTraceback("questdb._client.Buffer._column_ts_nanos", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02231:             self, str name, TimestampNanos ts) except -1:
+02232:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 02233:         cdef line_sender_column_name c_name
+02234:         str_to_column_name(self._cleared_b(), name, &c_name)
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2234, __pyx_L1_error)
  __pyx_t_2 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_1, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2234, __pyx_L1_error)
+02235:         if not line_sender_buffer_column_ts_nanos(self._impl, c_name, ts._value, &err):
  __pyx_t_3 = (!line_sender_buffer_column_ts_nanos(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_ts->_value, (&__pyx_v_err)));
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+02236:             raise c_err_to_py(err)
    __pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2236, __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(0, 2236, __pyx_L1_error)
 02237: 
+02238:     cdef inline void_int _column_numpy(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_numpy(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyArrayObject *__pyx_v_arr) {
  size_t __pyx_v_rank;
  double const *__pyx_v_data_ptr;
  struct line_sender_error *__pyx_v_err;
  struct line_sender_column_name __pyx_v_c_name;
  __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_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_AddTraceback("questdb._client.Buffer._column_numpy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02239:             self, str name, cnp.ndarray arr) except -1:
+02240:         if cnp.PyArray_TYPE(arr) != cnp.NPY_FLOAT64:
  __pyx_t_1 = (PyArray_TYPE(__pyx_v_arr) != NPY_FLOAT64);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+02241:             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(0, 2241, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+02242:                 QuestDBErrorCode.ArrayError,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2242, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ArrayError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2242, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+02243:                 f'Only float64 numpy arrays are supported, got dtype: {arr.dtype}')
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_arr), __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2243, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_t_5, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2243, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_Only_float64_numpy_arrays_are_su, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2243, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_8 = 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_8 = 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_8, (3-__pyx_t_8) | (__pyx_t_8*__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(0, 2241, __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(0, 2241, __pyx_L1_error)
 02244:         cdef:
+02245:             size_t rank = cnp.PyArray_NDIM(arr)
  __pyx_v_rank = PyArray_NDIM(__pyx_v_arr);
+02246:             const double * data_ptr = <const double*> cnp.PyArray_DATA(arr)
  __pyx_v_data_ptr = ((double const *)PyArray_DATA(__pyx_v_arr));
+02247:             line_sender_error * err = NULL
  __pyx_v_err = NULL;
 02248:             line_sender_column_name c_name
 02249: 
+02250:         str_to_column_name(self._cleared_b(), name, &c_name)
  __pyx_t_9 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2250, __pyx_L1_error)
  __pyx_t_10 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_9, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_10 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2250, __pyx_L1_error)
 02251: 
+02252:         if cnp.PyArray_FLAGS(arr) & cnp.NPY_ARRAY_C_CONTIGUOUS != 0:
  __pyx_t_1 = ((PyArray_FLAGS(__pyx_v_arr) & NPY_ARRAY_C_CONTIGUOUS) != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L4;
  }
+02253:             if not line_sender_buffer_column_f64_arr_c_major(
    __pyx_t_1 = (!line_sender_buffer_column_f64_arr_c_major(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_rank, ((size_t const *)PyArray_DIMS(__pyx_v_arr)), __pyx_v_data_ptr, PyArray_SIZE(__pyx_v_arr), (&__pyx_v_err)));
    if (unlikely(__pyx_t_1)) {
/* … */
    }
 02254:                     self._impl,
 02255:                     c_name,
 02256:                     rank,
 02257:                     <const size_t*> cnp.PyArray_DIMS(arr),
 02258:                     data_ptr,
 02259:                     cnp.PyArray_SIZE(arr),
 02260:                     &err):
+02261:                 raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2261, __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(0, 2261, __pyx_L1_error)
 02262:         else:
+02263:             if not line_sender_buffer_column_f64_arr_byte_strides(
  /*else*/ {
/* … */
    __pyx_t_1 = (!line_sender_buffer_column_f64_arr_byte_strides(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_rank, ((size_t const *)PyArray_DIMS(__pyx_v_arr)), ((Py_ssize_t const *)PyArray_STRIDES(__pyx_v_arr)), __pyx_v_data_ptr, PyArray_SIZE(__pyx_v_arr), (&__pyx_v_err)));
/* … */
    if (unlikely(__pyx_t_1)) {
/* … */
    }
  }
  __pyx_L4:;
 02264:                     self._impl,
 02265:                     c_name,
 02266:                     rank,
 02267:                     <const size_t*> cnp.PyArray_DIMS(arr),
 02268:                     <const ssize_t*> cnp.PyArray_STRIDES(arr), # N.B.: Strides expressed as byte jumps
 02269:                     data_ptr,
 02270:                     cnp.PyArray_SIZE(arr),
 02271:                     &err):
+02272:                 raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2272, __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(0, 2272, __pyx_L1_error)
 02273: 
+02274:     cdef inline void_int _column_dt(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_dt(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyDateTime_DateTime *__pyx_v_dt) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_column_name __pyx_v_c_name;
  int64_t __pyx_v_micros;
  __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_5);
  __Pyx_AddTraceback("questdb._client.Buffer._column_dt", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02275:             self, str name, cp_datetime dt) except -1:
+02276:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 02277:         cdef line_sender_column_name c_name
 02278:         # We limit ourselves to micros, since this is the maxium precision
 02279:         # exposed by the datetime library in Python.
 02280:         #
 02281:         # `datetime_to_micros` runs Python: subtracting two aware datetimes
 02282:         # calls the caller's `tzinfo.utcoffset()`, and a naive one reaches
 02283:         # `warnings.warn`. That code can recycle the string arena an encoded
 02284:         # column name borrows from, so the value is reduced to a C scalar
 02285:         # first and the name is encoded after.
+02286:         cdef int64_t micros = datetime_to_micros(dt)
  __pyx_t_1 = __pyx_f_7questdb_7_client_datetime_to_micros(__pyx_v_dt); if (unlikely(__pyx_t_1 == ((int64_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 2286, __pyx_L1_error)
  __pyx_v_micros = __pyx_t_1;
+02287:         str_to_column_name(self._cleared_b(), name, &c_name)
  __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__cleared_b(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2287, __pyx_L1_error)
  __pyx_t_3 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_t_2, __pyx_v_name, (&__pyx_v_c_name)); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2287, __pyx_L1_error)
+02288:         if not line_sender_buffer_column_ts_micros(
  __pyx_t_4 = (!line_sender_buffer_column_ts_micros(__pyx_v_self->_impl, __pyx_v_c_name, __pyx_v_micros, (&__pyx_v_err)));
  if (unlikely(__pyx_t_4)) {
/* … */
  }
 02289:                 self._impl, c_name, micros, &err):
+02290:             raise c_err_to_py(err)
    __pyx_t_5 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2290, __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(0, 2290, __pyx_L1_error)
 02291: 
+02292:     cdef inline void_int _column(self, str name, object value) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
  __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_AddTraceback("questdb._client.Buffer._column", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02293:         # An encoded column name borrows storage that `Buffer.clear()`
 02294:         # recycles, so it stays valid only while no Python code runs. Every
 02295:         # branch therefore takes the name as a `str` and encodes it itself,
 02296:         # immediately before its own native call and after any conversion
 02297:         # that runs the caller's Python. The property that keeps this true
 02298:         # is visible in the signatures: no `_column_*` helper accepts a
 02299:         # `line_sender_column_name`, and
 02300:         # `test_no_column_helper_takes_a_pre_encoded_name` holds it there.
+02301:         if PyBool_Check(<PyObject*>value):
  __pyx_t_1 = PyBool_Check(((PyObject *)__pyx_v_value));
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+02302:             self._column_bool(name, value)
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2302, __pyx_L1_error)
    __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__column_bool(__pyx_v_self, __pyx_v_name, __pyx_t_1); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2302, __pyx_L1_error)
+02303:         elif PyLong_CheckExact(<PyObject*>value):
  __pyx_t_1 = PyLong_CheckExact(((PyObject *)__pyx_v_value));
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+02304:             self._column_int(name, value)
    __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__column_int(__pyx_v_self, __pyx_v_name, __pyx_v_value); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2304, __pyx_L1_error)
+02305:         elif PyFloat_CheckExact(<PyObject*>value):
  __pyx_t_1 = PyFloat_CheckExact(((PyObject *)__pyx_v_value));
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+02306:             self._column_f64(name, value)
    __pyx_t_3 = __Pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_3 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2306, __pyx_L1_error)
    __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__column_f64(__pyx_v_self, __pyx_v_name, __pyx_t_3); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2306, __pyx_L1_error)
+02307:         elif PyUnicode_CheckExact(<PyObject*>value):
  __pyx_t_1 = PyUnicode_CheckExact(((PyObject *)__pyx_v_value));
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+02308:             self._column_str(name, value)
    __pyx_t_4 = __pyx_v_value;
    __Pyx_INCREF(__pyx_t_4);
    if (!(likely(PyUnicode_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_4))) __PYX_ERR(0, 2308, __pyx_L1_error)
    __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__column_str(__pyx_v_self, __pyx_v_name, ((PyObject*)__pyx_t_4)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2308, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+02309:         elif isinstance(value, TimestampMicros):
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros); 
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+02310:             self._column_ts_micros(name, value)
    if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros))))) __PYX_ERR(0, 2310, __pyx_L1_error)
    __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__column_ts_micros(__pyx_v_self, __pyx_v_name, ((struct __pyx_obj_7questdb_7_client_TimestampMicros *)__pyx_v_value)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2310, __pyx_L1_error)
+02311:         elif isinstance(value, TimestampNanos):
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos); 
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+02312:             self._column_ts_nanos(name, value)
    if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos))))) __PYX_ERR(0, 2312, __pyx_L1_error)
    __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__column_ts_nanos(__pyx_v_self, __pyx_v_name, ((struct __pyx_obj_7questdb_7_client_TimestampNanos *)__pyx_v_value)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2312, __pyx_L1_error)
+02313:         elif PyArray_CheckExact(<PyObject *> value):
  __pyx_t_1 = PyArray_CheckExact(((PyObject *)__pyx_v_value));
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+02314:             self._column_numpy(name, value)
    if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 2314, __pyx_L1_error)
    __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__column_numpy(__pyx_v_self, __pyx_v_name, ((PyArrayObject *)__pyx_v_value)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2314, __pyx_L1_error)
+02315:         elif isinstance(value, cp_datetime):
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime); 
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+02316:             self._column_dt(name, value)
    if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime))))) __PYX_ERR(0, 2316, __pyx_L1_error)
    __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__column_dt(__pyx_v_self, __pyx_v_name, ((PyDateTime_DateTime *)__pyx_v_value)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2316, __pyx_L1_error)
+02317:         elif _is_decimal(value):
  __pyx_t_1 = __pyx_f_7questdb_7_client__is_decimal(__pyx_v_value);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+02318:             self._column_decimal(name, value)
    __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__column_decimal(__pyx_v_self, __pyx_v_name, __pyx_v_value); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2318, __pyx_L1_error)
 02319:         else:
+02320:             self._column_qwp_only(name, value)
  /*else*/ {
    __pyx_t_2 = ((struct __pyx_vtabstruct_7questdb_7_client_Buffer *)__pyx_v_self->__pyx_vtab)->_column_qwp_only(__pyx_v_self, __pyx_v_name, __pyx_v_value); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2320, __pyx_L1_error)
  }
  __pyx_L3:;
 02321: 
+02322:     cdef void_int _column_qwp_only(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__column_qwp_only(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
  PyObject *__pyx_v_valid = NULL;
  __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_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("questdb._client.Buffer._column_qwp_only", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_valid);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02323:             self, str name, object value) except -1:
 02324:         # The QWP-only cell types and the unsupported-type error live
 02325:         # out of line, and deliberately not `inline`. `_column` dispatches
 02326:         # every cell of every row, and with these branches out of it the
 02327:         # common bool / int / float / str / datetime cells run through a
 02328:         # short function.
 02329:         #
 02330:         # Within this function the four wrapper classes come before
 02331:         # `uuid.UUID` and the IPV4 test. They are the cheapest checks in
 02332:         # the chain -- an exact type test against a cdef class -- and
 02333:         # none of them can be a UUID or an address, so nothing becomes
 02334:         # reachable only through the more expensive pair.
+02335:         if isinstance(value, (bytes, bytearray, memoryview)):
  __pyx_t_2 = PyBytes_Check(__pyx_v_value); 
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = PyByteArray_Check(__pyx_v_value); 
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = PyMemoryView_Check(__pyx_v_value); 
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+02336:             self._column_binary(name, value)
    __pyx_t_3 = __pyx_f_7questdb_7_client_6Buffer__column_binary(__pyx_v_self, __pyx_v_name, __pyx_v_value); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2336, __pyx_L1_error)
+02337:         elif isinstance(value, Char):
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Char); 
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+02338:             self._column_char(name, value)
    if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Char))))) __PYX_ERR(0, 2338, __pyx_L1_error)
    __pyx_t_3 = __pyx_f_7questdb_7_client_6Buffer__column_char(__pyx_v_self, __pyx_v_name, ((struct __pyx_obj_7questdb_7_client_Char *)__pyx_v_value)); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2338, __pyx_L1_error)
+02339:         elif isinstance(value, DateMillis):
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_DateMillis); 
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+02340:             self._column_date_millis(name, value)
    if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_DateMillis))))) __PYX_ERR(0, 2340, __pyx_L1_error)
    __pyx_t_3 = __pyx_f_7questdb_7_client_6Buffer__column_date_millis(__pyx_v_self, __pyx_v_name, ((struct __pyx_obj_7questdb_7_client_DateMillis *)__pyx_v_value)); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2340, __pyx_L1_error)
+02341:         elif isinstance(value, Long256):
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Long256); 
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+02342:             self._column_long256(name, value)
    if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Long256))))) __PYX_ERR(0, 2342, __pyx_L1_error)
    __pyx_t_3 = __pyx_f_7questdb_7_client_6Buffer__column_long256(__pyx_v_self, __pyx_v_name, ((struct __pyx_obj_7questdb_7_client_Long256 *)__pyx_v_value)); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2342, __pyx_L1_error)
+02343:         elif isinstance(value, Geohash):
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Geohash); 
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+02344:             self._column_geohash(name, value)
    if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Geohash))))) __PYX_ERR(0, 2344, __pyx_L1_error)
    __pyx_t_3 = __pyx_f_7questdb_7_client_6Buffer__column_geohash(__pyx_v_self, __pyx_v_name, ((struct __pyx_obj_7questdb_7_client_Geohash *)__pyx_v_value)); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2344, __pyx_L1_error)
+02345:         elif type(value) is _UUID or isinstance(value, _UUID):
  __pyx_t_2 = (((PyObject *)Py_TYPE(__pyx_v_value)) == __pyx_v_7questdb_7_client__UUID);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L7_bool_binop_done;
  }
  __pyx_t_4 = __pyx_v_7questdb_7_client__UUID;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_value, __pyx_t_4); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2345, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_1 = __pyx_t_2;
  __pyx_L7_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+02346:             self._column_uuid(name, value)
    __pyx_t_3 = __pyx_f_7questdb_7_client_6Buffer__column_uuid(__pyx_v_self, __pyx_v_name, __pyx_v_value); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2346, __pyx_L1_error)
+02347:         elif _is_ipv4_address(value):
  __pyx_t_1 = __pyx_f_7questdb_7_client__is_ipv4_address(__pyx_v_value); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2347, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+02348:             self._column_ipv4(name, value)
    __pyx_t_3 = __pyx_f_7questdb_7_client_6Buffer__column_ipv4(__pyx_v_self, __pyx_v_name, __pyx_v_value); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2348, __pyx_L1_error)
 02349:         else:
+02350:             if isinstance(value, _IPV6_ADDRESS):
  /*else*/ {
    __pyx_t_4 = __pyx_v_7questdb_7_client__IPV6_ADDRESS;
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_1 = PyObject_IsInstance(__pyx_v_value, __pyx_t_4); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2350, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+02351:                 raise TypeError(
      __pyx_t_5 = NULL;
      __pyx_t_6 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_IPv6_is_not_supported_QuestDB_ha};
        __pyx_t_4 = __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_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2351, __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(0, 2351, __pyx_L1_error)
 02352:                     'IPv6 is not supported; QuestDB has no IPv6 column type.')
+02353:             if isinstance(value, _IPV4_INTERFACE):
    __pyx_t_4 = __pyx_v_7questdb_7_client__IPV4_INTERFACE;
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_1 = PyObject_IsInstance(__pyx_v_value, __pyx_t_4); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2353, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(__pyx_t_1)) {
/* … */
    }
 02354:                 # It subclasses IPv4Address, so the list below would
 02355:                 # otherwise appear to contain the thing just rejected.
+02356:                 raise TypeError(
      __pyx_t_5 = NULL;
 02357:                     _IPV4_INTERFACE_REASON
+02358:                     + ' Pass its address instead, as `value.ip`.')
      __pyx_t_7 = __Pyx_PyUnicode_ConcatSafe(__pyx_v_7questdb_7_client__IPV4_INTERFACE_REASON, __pyx_mstate_global->__pyx_kp_u_Pass_its_address_instead_as_val); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2358, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_6 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_7};
        __pyx_t_4 = __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_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2356, __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(0, 2356, __pyx_L1_error)
+02359:             valid = ', '.join((
    __pyx_t_4 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__27, __pyx_mstate_global->__pyx_tuple[12]); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2359, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_v_valid = ((PyObject*)__pyx_t_4);
    __pyx_t_4 = 0;
+02360:                 'bool',
  __pyx_mstate_global->__pyx_tuple[12] = PyTuple_Pack(18, __pyx_mstate_global->__pyx_n_u_bool, __pyx_mstate_global->__pyx_n_u_int, __pyx_mstate_global->__pyx_n_u_float, __pyx_mstate_global->__pyx_n_u_str_2, __pyx_mstate_global->__pyx_n_u_TimestampMicros_2, __pyx_mstate_global->__pyx_n_u_TimestampNanos_2, __pyx_mstate_global->__pyx_kp_u_datetime_datetime, __pyx_mstate_global->__pyx_kp_u_numpy_ndarray, __pyx_mstate_global->__pyx_kp_u_decimal_Decimal, __pyx_mstate_global->__pyx_n_u_bytes, __pyx_mstate_global->__pyx_n_u_bytearray, __pyx_mstate_global->__pyx_n_u_memoryview, __pyx_mstate_global->__pyx_kp_u_uuid_UUID, __pyx_mstate_global->__pyx_kp_u_ipaddress_IPv4Address, __pyx_mstate_global->__pyx_n_u_Char_2, __pyx_mstate_global->__pyx_n_u_DateMillis_2, __pyx_mstate_global->__pyx_n_u_Long256_2, __pyx_mstate_global->__pyx_n_u_Geohash_2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[12])) __PYX_ERR(0, 2360, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[12]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[12]);
 02361:                 'int',
 02362:                 'float',
 02363:                 'str',
 02364:                 'TimestampMicros',
 02365:                 'TimestampNanos',
 02366:                 'datetime.datetime',
 02367:                 'numpy.ndarray',
 02368:                 'decimal.Decimal',
 02369:                 'bytes',
 02370:                 'bytearray',
 02371:                 'memoryview',
 02372:                 'uuid.UUID',
 02373:                 'ipaddress.IPv4Address',
 02374:                 'Char',
 02375:                 'DateMillis',
 02376:                 'Long256',
 02377:                 'Geohash'))
+02378:             raise TypeError(
    __pyx_t_7 = NULL;
+02379:                 f'Unsupported type: {_fqn(type(value))}. Must be one of: {valid}')
    __pyx_t_5 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_value)))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2379, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2379, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_valid); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2379, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_9[0] = __pyx_mstate_global->__pyx_kp_u_Unsupported_type;
    __pyx_t_9[1] = __pyx_t_8;
    __pyx_t_9[2] = __pyx_mstate_global->__pyx_kp_u_Must_be_one_of;
    __pyx_t_9[3] = __pyx_t_5;
    __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_9, 4, 18 * 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5));
    if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2379, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_10};
      __pyx_t_4 = __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_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2378, __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(0, 2378, __pyx_L1_error)
  }
  __pyx_L3:;
 02380: 
+02381:     cdef inline void_int _may_trigger_row_complete(self) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__may_trigger_row_complete(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
  PyObject *__pyx_v_sender;
  __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_1);
  __Pyx_AddTraceback("questdb._client.Buffer._may_trigger_row_complete", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+02382:         cdef PyObject* sender = NULL
  __pyx_v_sender = NULL;
+02383:         if self._row_complete_sender != None:
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_self->_row_complete_sender, Py_None, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2383, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 2383, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+02384:             if PyWeakref_GetRef(self._row_complete_sender, &sender):
    __pyx_t_1 = __pyx_v_self->_row_complete_sender;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyWeakref_GetRef(__pyx_t_1, (&__pyx_v_sender));
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_2) {
/* … */
    }
+02385:                 try:
      /*try:*/ {
+02386:                     may_flush_on_row_complete(
        __pyx_t_3 = __pyx_f_7questdb_7_client_may_flush_on_row_complete(__pyx_v_self, ((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_sender)); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2386, __pyx_L6_error)
      }
 02387:                         self, <Sender><object>sender)
 02388:                 finally:
+02389:                     Py_XDECREF(sender)
      /*finally:*/ {
        /*normal exit:*/{
          Py_XDECREF(__pyx_v_sender);
          goto __pyx_L7;
        }
        __pyx_L6_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
           __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
          if ( unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
          __Pyx_XGOTREF(__pyx_t_7);
          __Pyx_XGOTREF(__pyx_t_8);
          __Pyx_XGOTREF(__pyx_t_9);
          __Pyx_XGOTREF(__pyx_t_10);
          __Pyx_XGOTREF(__pyx_t_11);
          __Pyx_XGOTREF(__pyx_t_12);
          __pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
          {
            Py_XDECREF(__pyx_v_sender);
          }
          __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);
          __Pyx_XGIVEREF(__pyx_t_7);
          __Pyx_XGIVEREF(__pyx_t_8);
          __Pyx_XGIVEREF(__pyx_t_9);
          __Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
          __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
          __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6;
          goto __pyx_L1_error;
        }
        __pyx_L7:;
      }
 02390: 
+02391:     cdef inline void_int _at_ts_us(self, TimestampMicros ts) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__at_ts_us(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, struct __pyx_obj_7questdb_7_client_TimestampMicros *__pyx_v_ts) {
  struct line_sender_error *__pyx_v_err;
  __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_2);
  __Pyx_AddTraceback("questdb._client.Buffer._at_ts_us", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+02392:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+02393:         if not line_sender_buffer_at_micros(self._impl, ts._value, &err):
  __pyx_t_1 = (!line_sender_buffer_at_micros(__pyx_v_self->_impl, __pyx_v_ts->_value, (&__pyx_v_err)));
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+02394:             raise c_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2394, __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(0, 2394, __pyx_L1_error)
 02395: 
+02396:     cdef inline void_int _at_ts_ns(self, TimestampNanos ts) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__at_ts_ns(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, struct __pyx_obj_7questdb_7_client_TimestampNanos *__pyx_v_ts) {
  struct line_sender_error *__pyx_v_err;
  __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_2);
  __Pyx_AddTraceback("questdb._client.Buffer._at_ts_ns", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+02397:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+02398:         if not line_sender_buffer_at_nanos(self._impl, ts._value, &err):
  __pyx_t_1 = (!line_sender_buffer_at_nanos(__pyx_v_self->_impl, __pyx_v_ts->_value, (&__pyx_v_err)));
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+02399:             raise c_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2399, __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(0, 2399, __pyx_L1_error)
 02400: 
+02401:     cdef inline void_int _at_dt(self, cp_datetime dt) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__at_dt(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyDateTime_DateTime *__pyx_v_dt) {
  int64_t __pyx_v_value;
  struct line_sender_error *__pyx_v_err;
  __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_3);
  __Pyx_AddTraceback("questdb._client.Buffer._at_dt", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+02402:         cdef int64_t value = datetime_to_micros(dt)
  __pyx_t_1 = __pyx_f_7questdb_7_client_datetime_to_micros(__pyx_v_dt); if (unlikely(__pyx_t_1 == ((int64_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 2402, __pyx_L1_error)
  __pyx_v_value = __pyx_t_1;
+02403:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+02404:         if not line_sender_buffer_at_micros(self._impl, value, &err):
  __pyx_t_2 = (!line_sender_buffer_at_micros(__pyx_v_self->_impl, __pyx_v_value, (&__pyx_v_err)));
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+02405:             raise c_err_to_py(err)
    __pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2405, __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(0, 2405, __pyx_L1_error)
 02406: 
+02407:     cdef inline void_int _at_now(self) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__at_now(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self) {
  struct line_sender_error *__pyx_v_err;
  __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_2);
  __Pyx_AddTraceback("questdb._client.Buffer._at_now", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+02408:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+02409:         if not line_sender_buffer_at_now(self._impl, &err):
  __pyx_t_1 = (!line_sender_buffer_at_now(__pyx_v_self->_impl, (&__pyx_v_err)));
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+02410:             raise c_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2410, __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(0, 2410, __pyx_L1_error)
 02411: 
+02412:     cdef inline void_int _at(self, object ts) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__at(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_ts) {
  __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_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("questdb._client.Buffer._at", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+02413:         if ts is None:
  __pyx_t_1 = (__pyx_v_ts == Py_None);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+02414:             self._at_now()
    __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__at_now(__pyx_v_self); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2414, __pyx_L1_error)
+02415:         elif isinstance(ts, TimestampMicros):
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_ts, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros); 
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+02416:             self._at_ts_us(ts)
    if (!(likely(((__pyx_v_ts) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_ts, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros))))) __PYX_ERR(0, 2416, __pyx_L1_error)
    __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__at_ts_us(__pyx_v_self, ((struct __pyx_obj_7questdb_7_client_TimestampMicros *)__pyx_v_ts)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2416, __pyx_L1_error)
+02417:         elif isinstance(ts, TimestampNanos):
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_ts, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos); 
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+02418:             self._at_ts_ns(ts)
    if (!(likely(((__pyx_v_ts) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_ts, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos))))) __PYX_ERR(0, 2418, __pyx_L1_error)
    __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__at_ts_ns(__pyx_v_self, ((struct __pyx_obj_7questdb_7_client_TimestampNanos *)__pyx_v_ts)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2418, __pyx_L1_error)
+02419:         elif isinstance(ts, cp_datetime):
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_ts, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime); 
  if (likely(__pyx_t_1)) {
/* … */
    goto __pyx_L3;
  }
+02420:             self._at_dt(ts)
    if (!(likely(((__pyx_v_ts) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_ts, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime))))) __PYX_ERR(0, 2420, __pyx_L1_error)
    __pyx_t_2 = __pyx_f_7questdb_7_client_6Buffer__at_dt(__pyx_v_self, ((PyDateTime_DateTime *)__pyx_v_ts)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2420, __pyx_L1_error)
 02421:         else:
+02422:             raise TypeError(
  /*else*/ {
    __pyx_t_4 = NULL;
+02423:                 f'Unsupported type: {_fqn(type(ts))}. Must be one of: ' +
    __pyx_t_5 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_ts)))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2423, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyUnicode_Unicode(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2423, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_7[0] = __pyx_mstate_global->__pyx_kp_u_Unsupported_type;
    __pyx_t_7[1] = __pyx_t_6;
    __pyx_t_7[2] = __pyx_mstate_global->__pyx_kp_u_Must_be_one_of_TimestampNanos_d;
    __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_7, 3, 18 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6) + 48, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6));
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2423, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_8 = 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_8, (2-__pyx_t_8) | (__pyx_t_8*__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(0, 2422, __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(0, 2422, __pyx_L1_error)
  }
  __pyx_L3:;
 02424:                 'TimestampNanos, datetime, None')
 02425: 
+02426:     cdef void_int _row(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Buffer__row(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, int __pyx_v_allow_auto_flush, PyObject *__pyx_v_table_name, struct __pyx_opt_args_7questdb_7_client_6Buffer__row *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("questdb._client.Buffer._row", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_name);
  __Pyx_XDECREF(__pyx_v_value);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_7questdb_7_client_6Buffer__row {
  int __pyx_n;
  PyObject *symbols;
  PyObject *columns;
  PyObject *at;
  int keep_marker;
};
 02427:             self,
 02428:             bint allow_auto_flush,
 02429:             str table_name,
+02430:             dict symbols=None,
  PyObject *__pyx_v_symbols = ((PyObject*)Py_None);
+02431:             dict columns=None,
  PyObject *__pyx_v_columns = ((PyObject*)Py_None);
+02432:             object at=None,
  PyObject *__pyx_v_at = ((PyObject *)Py_None);
+02433:             bint keep_marker=False) except -1:
  int __pyx_v_keep_marker = ((int)0);
  int __pyx_v_wrote_fields;
  PyObject *__pyx_v_name = NULL;
  PyObject *__pyx_v_value = NULL;
  __pyx_t_7questdb_7_client_void_int __pyx_r;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_symbols = __pyx_optional_args->symbols;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_columns = __pyx_optional_args->columns;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_at = __pyx_optional_args->at;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_keep_marker = __pyx_optional_args->keep_marker;
          }
        }
      }
    }
  }
 02434:         """
 02435:         Add a row to the buffer.
 02436:         """
+02437:         cdef bint wrote_fields = False
  __pyx_v_wrote_fields = 0;
+02438:         self._check_impl()
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__check_impl(__pyx_v_self); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2438, __pyx_L1_error)
+02439:         self._set_marker()
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__set_marker(__pyx_v_self); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2439, __pyx_L1_error)
 02440:         # A column value whose conversion runs Python code can call back
 02441:         # into whatever owns this buffer. `_row_depth` is how those owners
 02442:         # tell "a row is part-way through" from "a rewind point is held":
 02443:         # `PooledSender.row` deliberately keeps the marker set across its
 02444:         # own flush, so `_marker_set` cannot answer that question.
+02445:         self._row_depth += 1
  __pyx_v_self->_row_depth = (__pyx_v_self->_row_depth + 1);
+02446:         try:
  /*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_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_6); __pyx_t_6 = 0;
/* … */
      __pyx_L8_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_L4_error;
      __pyx_L11_try_end:;
    }
  }
+02447:             self._table(table_name)
        __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__table(__pyx_v_self, __pyx_v_table_name); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2447, __pyx_L6_error)
+02448:             if symbols is not None:
        __pyx_t_5 = (__pyx_v_symbols != ((PyObject*)Py_None));
        if (__pyx_t_5) {
/* … */
        }
+02449:                 for name, value in symbols.items():
          __pyx_t_7 = 0;
          if (unlikely(__pyx_v_symbols == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
            __PYX_ERR(0, 2449, __pyx_L6_error)
          }
          __pyx_t_10 = __Pyx_dict_iterator(__pyx_v_symbols, 1, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_8), (&__pyx_t_9)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2449, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_XDECREF(__pyx_t_6);
          __pyx_t_6 = __pyx_t_10;
          __pyx_t_10 = 0;
          while (1) {
            __pyx_t_12 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_8, &__pyx_t_7, &__pyx_t_10, &__pyx_t_11, NULL, __pyx_t_9);
            if (unlikely(__pyx_t_12 == 0)) break;
            if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 2449, __pyx_L6_error)
            __Pyx_GOTREF(__pyx_t_10);
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_10);
            __pyx_t_10 = 0;
            __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_11);
            __pyx_t_11 = 0;
+02450:                     if value is not None:
            __pyx_t_5 = (__pyx_v_value != Py_None);
            if (__pyx_t_5) {
/* … */
            }
          }
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+02451:                         self._symbol(name, value)
              __pyx_t_11 = __pyx_v_name;
              __Pyx_INCREF(__pyx_t_11);
              if (!(likely(PyUnicode_CheckExact(__pyx_t_11))||((__pyx_t_11) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_11))) __PYX_ERR(0, 2451, __pyx_L6_error)
              __pyx_t_10 = __pyx_v_value;
              __Pyx_INCREF(__pyx_t_10);
              if (!(likely(PyUnicode_CheckExact(__pyx_t_10))||((__pyx_t_10) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_10))) __PYX_ERR(0, 2451, __pyx_L6_error)
              __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__symbol(__pyx_v_self, ((PyObject*)__pyx_t_11), ((PyObject*)__pyx_t_10)); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2451, __pyx_L6_error)
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
              __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+02452:                         wrote_fields = True
              __pyx_v_wrote_fields = 1;
+02453:             if columns is not None:
        __pyx_t_5 = (__pyx_v_columns != ((PyObject*)Py_None));
        if (__pyx_t_5) {
/* … */
        }
+02454:                 for name, value in columns.items():
          __pyx_t_8 = 0;
          if (unlikely(__pyx_v_columns == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
            __PYX_ERR(0, 2454, __pyx_L6_error)
          }
          __pyx_t_10 = __Pyx_dict_iterator(__pyx_v_columns, 1, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_7), (&__pyx_t_9)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2454, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_XDECREF(__pyx_t_6);
          __pyx_t_6 = __pyx_t_10;
          __pyx_t_10 = 0;
          while (1) {
            __pyx_t_12 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_7, &__pyx_t_8, &__pyx_t_10, &__pyx_t_11, NULL, __pyx_t_9);
            if (unlikely(__pyx_t_12 == 0)) break;
            if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 2454, __pyx_L6_error)
            __Pyx_GOTREF(__pyx_t_10);
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_10);
            __pyx_t_10 = 0;
            __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_11);
            __pyx_t_11 = 0;
+02455:                     if value is not None:
            __pyx_t_5 = (__pyx_v_value != Py_None);
            if (__pyx_t_5) {
/* … */
            }
          }
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+02456:                         self._column(name, value)
              __pyx_t_11 = __pyx_v_name;
              __Pyx_INCREF(__pyx_t_11);
              if (!(likely(PyUnicode_CheckExact(__pyx_t_11))||((__pyx_t_11) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_11))) __PYX_ERR(0, 2456, __pyx_L6_error)
              __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__column(__pyx_v_self, ((PyObject*)__pyx_t_11), __pyx_v_value); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2456, __pyx_L6_error)
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+02457:                         wrote_fields = True
              __pyx_v_wrote_fields = 1;
+02458:             if wrote_fields:
        if (__pyx_v_wrote_fields) {
/* … */
          goto __pyx_L20;
        }
+02459:                 self._at(at if not isinstance(at, ServerTimestampType) else None)
          __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_ServerTimestampType); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2459, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_5 = PyObject_IsInstance(__pyx_v_at, __pyx_t_11); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 2459, __pyx_L6_error)
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __pyx_t_13 = (!__pyx_t_5);
          if (__pyx_t_13) {
            __Pyx_INCREF(__pyx_v_at);
            __pyx_t_6 = __pyx_v_at;
          } else {
            __Pyx_INCREF(Py_None);
            __pyx_t_6 = Py_None;
          }
          __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__at(__pyx_v_self, __pyx_t_6); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2459, __pyx_L6_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+02460:                 if not keep_marker:
          __pyx_t_13 = (!__pyx_v_keep_marker);
          if (__pyx_t_13) {
/* … */
          }
+02461:                     self._clear_marker()
            __pyx_t_6 = __pyx_f_7questdb_7_client_6Buffer__clear_marker(__pyx_v_self); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2461, __pyx_L6_error)
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 02462:             else:
+02463:                 self._rewind_to_marker()
        /*else*/ {
          __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__rewind_to_marker(__pyx_v_self); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2463, __pyx_L6_error)
        }
        __pyx_L20:;
+02464:         except:
      /*except:*/ {
        __Pyx_AddTraceback("questdb._client.Buffer._row", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_11, &__pyx_t_10) < 0) __PYX_ERR(0, 2464, __pyx_L8_except_error)
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_11);
        __Pyx_XGOTREF(__pyx_t_10);
+02465:             self._rewind_after_failure()
        __pyx_t_14 = __pyx_f_7questdb_7_client_6Buffer__rewind_after_failure(__pyx_v_self); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2465, __pyx_L8_except_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+02466:             raise
        __Pyx_GIVEREF(__pyx_t_6);
        __Pyx_GIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ErrRestoreWithState(__pyx_t_6, __pyx_t_11, __pyx_t_10);
        __pyx_t_6 = 0;  __pyx_t_11 = 0;  __pyx_t_10 = 0; 
        __PYX_ERR(0, 2466, __pyx_L8_except_error)
      }
 02467:         finally:
+02468:             self._leave_row()
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_f_7questdb_7_client_6Buffer__leave_row(__pyx_v_self);
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_4 = 0; __pyx_t_3 = 0; __pyx_t_2 = 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_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18);
      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_16);
      __Pyx_XGOTREF(__pyx_t_17);
      __Pyx_XGOTREF(__pyx_t_18);
      __pyx_t_9 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_15 = __pyx_filename;
      {
        __pyx_f_7questdb_7_client_6Buffer__leave_row(__pyx_v_self);
      }
      __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_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_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
      __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_15;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }
 02469:         # Only a `Sender`'s own buffer has an auto-flush to trigger, and
 02470:         # `Sender.row` refuses a row there while another call is part-way
 02471:         # through the buffer, so this flush never cuts into an outer
 02472:         # call's work.
+02473:         if wrote_fields and allow_auto_flush:
  if (__pyx_v_wrote_fields) {
  } else {
    __pyx_t_13 = __pyx_v_wrote_fields;
    goto __pyx_L27_bool_binop_done;
  }
  __pyx_t_13 = __pyx_v_allow_auto_flush;
  __pyx_L27_bool_binop_done:;
  if (__pyx_t_13) {
/* … */
  }
+02474:             self._may_trigger_row_complete()
    __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__may_trigger_row_complete(__pyx_v_self); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2474, __pyx_L1_error)
 02475: 
+02476:     def row(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_19row(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Buffer_18row, "\n        Add a single row (line) to the buffer.\n\n        .. code-block:: python\n\n            # All fields specified.\n            buffer.row(\n                'table_name',\n                symbols={'sym1': 'abc', 'sym2': 'def', 'sym3': None},\n                columns={\n                    'col1': True,\n                    'col2': 123,\n                    'col3': 3.14,\n                    'col4': 'xyz',\n                    'col5': TimestampMicros(123456789),\n                    'col6': datetime(2019, 1, 1, 12, 0, 0),\n                    'col7': numpy.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]),\n                    'col8': None},\n                at=TimestampNanos(123456789))\n\n            # Only symbols specified. Designated timestamp assigned by the db.\n            buffer.row(\n                'table_name',\n                symbols={'sym1': 'abc', 'sym2': 'def'}, at=Server.Timestamp)\n\n            # Float columns and timestamp specified as `datetime.datetime`.\n            # Pay special attention to the timezone, which if unspecified is\n            # interpreted as UTC.\n            buffer.row(\n                'sensor data',\n                columns={\n                    'temperature': 24.5,\n                    'humidity': 0.5},\n                at=datetime.datetime.now(tz=datetime.timezone.utc))\n\n\n        Python strings passed as values to ``symbols`` are going to be encoded\n        as the ``SYMBOL`` type in QuestDB, whilst Python strings passed as\n        values to ``columns`` are going to be encoded as the ``STRING`` type.\n\n        Refer to the\n        `QuestDB documentation <https://questdb.com/docs/concept/symbol/>`_ to\n        understand the difference between the ``SYMBOL`` and ``STRING`` types\n        (TL;DR: symbols are interned strings).\n\n        Column values can be specified with Python types directly and map as so:\n\n        .. list-table::\n            :header-rows: 1\n\n            * - Python type\n              - Seria""lized as ILP type\n            * - ``bool``\n              - `BOOLEAN <https://questdb.com/docs/reference/api/ilp/columnset-types#boolean>`_\n            * - ``decimal``\n              - `DECIMAL <https://questdb.com/docs/reference/api/ilp/columnset-types#decimal>`_\n            * - ``int``\n              - `INTEGER <https://questdb.com/docs/reference/api/ilp/columnset-types#integer>`_\n            * - ``float``\n              - `FLOAT <https://questdb.com/docs/reference/api/ilp/columnset-types#float>`_\n            * - ``str``\n              - `STRING <https://questdb.com/docs/reference/api/ilp/columnset-types#string>`_\n            * - ``numpy.ndarray``\n              - `ARRAY <https://questdb.com/docs/reference/api/ilp/columnset-types#array>`_\n            * - ``datetime.datetime`` and ``TimestampMicros``\n              - `TIMESTAMP <https://questdb.com/docs/reference/api/ilp/columnset-types#timestamp>`_\n            * - ``uuid.UUID``\n              - UUID (QWP-only)\n            * - ``ipaddress.IPv4Address``\n              - IPV4 (QWP-only)\n            * - ``bytes``, ``bytearray``, or ``memoryview``\n              - BINARY (QWP-only)\n            * - ``Char``\n              - CHAR (QWP-only)\n            * - ``DateMillis``\n              - DATE (QWP-only)\n            * - ``Long256``\n              - LONG256 (QWP-only)\n            * - ``Geohash``\n              - GEOHASH (QWP-only)\n            * - ``None``\n              - *Column is skipped and not serialized.*\n\n        **Note**: Support for NumPy arrays (``numpy.array``) requires QuestDB server version 9.0.0 or higher.\n\n        The seven QWP-only types require protocol ``udp``, ``ws``, or ``wss``\n        and are rejected by ILP buffers used by ``tcp``, ``tcps``, ``http``,\n        and ``https``. They require QuestDB 10 or newer, the first\n        production QWP implementation.\n\n        QuestDB reserves these values as ``NULL`` sentinels, but the client\n        deliberately accepts them: IPV4 ``0.0.""0.0``, DATE ``INT64_MIN``, UUID\n        ``80000000-0000-0000-8000-000000000000``, and a LONG256 whose four\n        64-bit limbs are all ``0x8000000000000000``. CHAR has no physical\n        ``NULL`` sentinel: ``'\\x00'`` is stored as code unit 0, although some\n        SQL operations treat it as CHAR's null/absent marker. GEOHASH has no\n        sentinel collision. Empty BINARY ``b''`` is a real empty value and is\n        distinct from ``NULL``.\n\n        A bare ``int`` is a 64-bit LONG, so a value outside\n        ``-2**63 .. 2**63-1`` raises ``OverflowError``. On a QWP buffer the\n        message names :class:`Long256 <questdb.Long256>`, the wrapper that\n        sends it as a 256-bit LONG256 instead; an ILP buffer, which has no\n        LONG256 to offer, reports the bare conversion failure.\n\n        If the destination table was already created, then the columns types\n        will be cast to the types of the existing columns whenever possible\n        (Refer to the QuestDB documentation pages linked above).\n\n        Adding a row can trigger auto-flushing behaviour.\n\n        :param table_name: The name of the table to which the row belongs.\n        :param symbols: A dictionary of symbol column names to ``str`` values.\n            As a convenience, you can also pass a ``None`` value which will\n            have the same effect as skipping the key: If the column already\n            existed, it will be recorded as ``NULL``, otherwise it will not be\n            created.\n        :param columns: A dictionary mapping column names to the supported\n            column values listed above.\n            As a convenience, you can also pass a ``None`` value which will\n            have the same effect as skipping the key: If the column already\n            existed, it will be recorded as ``NULL``, otherwise it will not be\n            created.\n        :param at: The timestamp of the row. This is required!\n            If ``ServerTimestamp``, timestamp is assign""ed by QuestDB.\n            If ``datetime``, the timestamp is converted to nanoseconds.\n            A nanosecond unix epoch timestamp can be passed\n            explicitly as a ``TimestampNanos`` object.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Buffer_19row = {"row", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Buffer_19row, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Buffer_18row};
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_19row(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_table_name = 0;
  PyObject *__pyx_v_symbols = 0;
  PyObject *__pyx_v_columns = 0;
  PyObject *__pyx_v_at = 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 (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_table_name,&__pyx_mstate_global->__pyx_n_u_at,&__pyx_mstate_global->__pyx_n_u_symbols,&__pyx_mstate_global->__pyx_n_u_columns,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(0, 2476, __pyx_L3_error)
    if (likely(__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(0, 2476, __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", 0) < (0)) __PYX_ERR(0, 2476, __pyx_L3_error)
/* … */
  /* 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_6Buffer_18row(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_table_name, PyObject *__pyx_v_symbols, PyObject *__pyx_v_columns, PyObject *__pyx_v_at) {
  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.Buffer.row", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_25 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 2476, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
/* … */
  __pyx_t_16 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2476, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_table_name, __pyx_mstate_global->__pyx_n_u_str_2) < (0)) __PYX_ERR(0, 2476, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_Optional_str) < (0)) __PYX_ERR(0, 2476, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_columns, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_Union_None_boo_2) < (0)) __PYX_ERR(0, 2476, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_at, __pyx_mstate_global->__pyx_kp_u_Union_ServerTimestampType_Timest) < (0)) __PYX_ERR(0, 2476, __pyx_L1_error)
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Buffer_19row, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer_row, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[190])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2476, __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_CyFunction_SetDefaultsKwDict(__pyx_t_4, __pyx_t_25);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_16);
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, __pyx_mstate_global->__pyx_n_u_row_2, __pyx_t_4) < (0)) __PYX_ERR(0, 2476, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 02477:             self,
 02478:             table_name: str,
 02479:             *,
+02480:             symbols: Optional[Dict[str, Optional[str]]]=None,
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_symbols, Py_None) < (0)) __PYX_ERR(0, 2476, __pyx_L1_error)
 02481:             columns: Optional[Dict[
 02482:                 str,
 02483:                 Union[None, bool, int, float, str, TimestampMicros,
 02484:                       TimestampNanos, datetime.datetime, numpy.ndarray,
 02485:                       Decimal, uuid.UUID, ipaddress.IPv4Address, bytes,
 02486:                       bytearray, memoryview, Char, DateMillis, Long256,
 02487:                       Geohash]]
+02488:                 ]=None,
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("row", 1, 1, 1, i); __PYX_ERR(0, 2476, __pyx_L3_error) }
      }
      for (Py_ssize_t i = 1; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseKeywordRequired("row", *(__pyx_pyargnames[i - 0])); __PYX_ERR(0, 2476, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      __Pyx_RaiseKeywordRequired("row", __pyx_mstate_global->__pyx_n_u_at); __PYX_ERR(0, 2476, __pyx_L3_error)
    }
    __pyx_v_table_name = ((PyObject*)values[0]);
    __pyx_v_at = values[1];
    __pyx_v_symbols = ((PyObject*)values[2]);
    __pyx_v_columns = ((PyObject*)values[3]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("row", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 2476, __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.Buffer.row", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_table_name), (&PyUnicode_Type), 0, "table_name", 2))) __PYX_ERR(0, 2478, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_symbols), (&PyDict_Type), 1, "symbols", 2))) __PYX_ERR(0, 2480, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_columns), (&PyDict_Type), 1, "columns", 2))) __PYX_ERR(0, 2481, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_6Buffer_18row(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self), __pyx_v_table_name, __pyx_v_symbols, __pyx_v_columns, __pyx_v_at);
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_columns, Py_None) < (0)) __PYX_ERR(0, 2476, __pyx_L1_error)
 02489:             at: Union[ServerTimestampType, TimestampNanos, datetime.datetime]):
 02490:         """
 02491:         Add a single row (line) to the buffer.
 02492: 
 02493:         .. code-block:: python
 02494: 
 02495:             # All fields specified.
 02496:             buffer.row(
 02497:                 'table_name',
 02498:                 symbols={'sym1': 'abc', 'sym2': 'def', 'sym3': None},
 02499:                 columns={
 02500:                     'col1': True,
 02501:                     'col2': 123,
 02502:                     'col3': 3.14,
 02503:                     'col4': 'xyz',
 02504:                     'col5': TimestampMicros(123456789),
 02505:                     'col6': datetime(2019, 1, 1, 12, 0, 0),
 02506:                     'col7': numpy.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]),
 02507:                     'col8': None},
 02508:                 at=TimestampNanos(123456789))
 02509: 
 02510:             # Only symbols specified. Designated timestamp assigned by the db.
 02511:             buffer.row(
 02512:                 'table_name',
 02513:                 symbols={'sym1': 'abc', 'sym2': 'def'}, at=Server.Timestamp)
 02514: 
 02515:             # Float columns and timestamp specified as `datetime.datetime`.
 02516:             # Pay special attention to the timezone, which if unspecified is
 02517:             # interpreted as UTC.
 02518:             buffer.row(
 02519:                 'sensor data',
 02520:                 columns={
 02521:                     'temperature': 24.5,
 02522:                     'humidity': 0.5},
 02523:                 at=datetime.datetime.now(tz=datetime.timezone.utc))
 02524: 
 02525: 
 02526:         Python strings passed as values to ``symbols`` are going to be encoded
 02527:         as the ``SYMBOL`` type in QuestDB, whilst Python strings passed as
 02528:         values to ``columns`` are going to be encoded as the ``STRING`` type.
 02529: 
 02530:         Refer to the
 02531:         `QuestDB documentation <https://questdb.com/docs/concept/symbol/>`_ to
 02532:         understand the difference between the ``SYMBOL`` and ``STRING`` types
 02533:         (TL;DR: symbols are interned strings).
 02534: 
 02535:         Column values can be specified with Python types directly and map as so:
 02536: 
 02537:         .. list-table::
 02538:             :header-rows: 1
 02539: 
 02540:             * - Python type
 02541:               - Serialized as ILP type
 02542:             * - ``bool``
 02543:               - `BOOLEAN <https://questdb.com/docs/reference/api/ilp/columnset-types#boolean>`_
 02544:             * - ``decimal``
 02545:               - `DECIMAL <https://questdb.com/docs/reference/api/ilp/columnset-types#decimal>`_
 02546:             * - ``int``
 02547:               - `INTEGER <https://questdb.com/docs/reference/api/ilp/columnset-types#integer>`_
 02548:             * - ``float``
 02549:               - `FLOAT <https://questdb.com/docs/reference/api/ilp/columnset-types#float>`_
 02550:             * - ``str``
 02551:               - `STRING <https://questdb.com/docs/reference/api/ilp/columnset-types#string>`_
 02552:             * - ``numpy.ndarray``
 02553:               - `ARRAY <https://questdb.com/docs/reference/api/ilp/columnset-types#array>`_
 02554:             * - ``datetime.datetime`` and ``TimestampMicros``
 02555:               - `TIMESTAMP <https://questdb.com/docs/reference/api/ilp/columnset-types#timestamp>`_
 02556:             * - ``uuid.UUID``
 02557:               - UUID (QWP-only)
 02558:             * - ``ipaddress.IPv4Address``
 02559:               - IPV4 (QWP-only)
 02560:             * - ``bytes``, ``bytearray``, or ``memoryview``
 02561:               - BINARY (QWP-only)
 02562:             * - ``Char``
 02563:               - CHAR (QWP-only)
 02564:             * - ``DateMillis``
 02565:               - DATE (QWP-only)
 02566:             * - ``Long256``
 02567:               - LONG256 (QWP-only)
 02568:             * - ``Geohash``
 02569:               - GEOHASH (QWP-only)
 02570:             * - ``None``
 02571:               - *Column is skipped and not serialized.*
 02572: 
 02573:         **Note**: Support for NumPy arrays (``numpy.array``) requires QuestDB server version 9.0.0 or higher.
 02574: 
 02575:         The seven QWP-only types require protocol ``udp``, ``ws``, or ``wss``
 02576:         and are rejected by ILP buffers used by ``tcp``, ``tcps``, ``http``,
 02577:         and ``https``. They require QuestDB 10 or newer, the first
 02578:         production QWP implementation.
 02579: 
 02580:         QuestDB reserves these values as ``NULL`` sentinels, but the client
 02581:         deliberately accepts them: IPV4 ``0.0.0.0``, DATE ``INT64_MIN``, UUID
 02582:         ``80000000-0000-0000-8000-000000000000``, and a LONG256 whose four
 02583:         64-bit limbs are all ``0x8000000000000000``. CHAR has no physical
 02584:         ``NULL`` sentinel: ``'\\x00'`` is stored as code unit 0, although some
 02585:         SQL operations treat it as CHAR's null/absent marker. GEOHASH has no
 02586:         sentinel collision. Empty BINARY ``b''`` is a real empty value and is
 02587:         distinct from ``NULL``.
 02588: 
 02589:         A bare ``int`` is a 64-bit LONG, so a value outside
 02590:         ``-2**63 .. 2**63-1`` raises ``OverflowError``. On a QWP buffer the
 02591:         message names :class:`Long256 <questdb.Long256>`, the wrapper that
 02592:         sends it as a 256-bit LONG256 instead; an ILP buffer, which has no
 02593:         LONG256 to offer, reports the bare conversion failure.
 02594: 
 02595:         If the destination table was already created, then the columns types
 02596:         will be cast to the types of the existing columns whenever possible
 02597:         (Refer to the QuestDB documentation pages linked above).
 02598: 
 02599:         Adding a row can trigger auto-flushing behaviour.
 02600: 
 02601:         :param table_name: The name of the table to which the row belongs.
 02602:         :param symbols: A dictionary of symbol column names to ``str`` values.
 02603:             As a convenience, you can also pass a ``None`` value which will
 02604:             have the same effect as skipping the key: If the column already
 02605:             existed, it will be recorded as ``NULL``, otherwise it will not be
 02606:             created.
 02607:         :param columns: A dictionary mapping column names to the supported
 02608:             column values listed above.
 02609:             As a convenience, you can also pass a ``None`` value which will
 02610:             have the same effect as skipping the key: If the column already
 02611:             existed, it will be recorded as ``NULL``, otherwise it will not be
 02612:             created.
 02613:         :param at: The timestamp of the row. This is required!
 02614:             If ``ServerTimestamp``, timestamp is assigned by QuestDB.
 02615:             If ``datetime``, the timestamp is converted to nanoseconds.
 02616:             A nanosecond unix epoch timestamp can be passed
 02617:             explicitly as a ``TimestampNanos`` object.
 02618:         """
+02619:         if at is None:
  __pyx_t_1 = (__pyx_v_at == Py_None);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+02620:             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(0, 2620, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+02621:                 QuestDBErrorCode.InvalidTimestamp,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2621, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2621, __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_at_must_be_of_type_TimestampNan};
      __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(0, 2620, __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(0, 2620, __pyx_L1_error)
 02622:                 "`at` must be of type TimestampNanos, datetime, or ServerTimestamp"
 02623:             )
+02624:         self._row(
  __pyx_t_9.__pyx_n = 3;
  __pyx_t_9.symbols = __pyx_v_symbols;
  __pyx_t_9.columns = __pyx_v_columns;
  __pyx_t_9.at = __pyx_v_at;
  __pyx_t_8 = ((struct __pyx_vtabstruct_7questdb_7_client_Buffer *)__pyx_v_self->__pyx_vtab)->_row(__pyx_v_self, 1, __pyx_v_table_name, &__pyx_t_9); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2624, __pyx_L1_error)
 02625:             True,  # allow_auto_flush
 02626:             table_name,
 02627:             symbols,
 02628:             columns,
 02629:             at)
+02630:         return self
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;
 02631: 
+02632:     def dataframe(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_21dataframe(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Buffer_20dataframe, "\n        Add a pandas DataFrame to the buffer.\n\n        Also see :func:`Sender.dataframe <questdb.Sender.dataframe>` if you\n        are not using the buffer explicitly. Over ILP and QWP/UDP it accepts\n        the arguments shown here and adds auto-flushing. Over QWP/WebSocket\n        it instead uses the direct columnar path, additionally accepting\n        ``max_rows_per_batch`` and ``schema_overrides``; see\n        :meth:`QuestDB.dataframe <questdb.QuestDB.dataframe>` for that path's\n        supported column types and arguments.\n\n        Requires ``pandas`` and ``numpy``. ``pyarrow`` is only needed\n        when the frame contains ``pd.ArrowDtype`` / ``pd.Categorical`` /\n        ``string`` dtype columns \342\200\224 purely NumPy / object dtypes work\n        without it.\n\n        Adding a dataframe can trigger auto-flushing behaviour,\n        even between rows of the same dataframe. To avoid this, you can\n        use HTTP and transactions (see :func:`Sender.transaction <questdb.Sender.transaction>`).\n\n        :param df: The pandas DataFrame to serialize to the buffer.\n        :type df: pandas.DataFrame\n\n        :param table_name: The name of the table to which the rows belong.\n\n            If ``None``, the table name is taken from the ``table_name_col``\n            parameter. If both ``table_name`` and ``table_name_col`` are\n            ``None``, the table name is taken from the DataFrame's index\n            name (``df.index.name`` attribute).\n        :type table_name: str or None\n\n        :param table_name_col: The name or index of the column in the DataFrame\n            that contains the table name.\n            \n            If ``None``, the table name is taken\n            from the ``table_name`` parameter. If both ``table_name`` and\n            ``table_name_col`` are ``None``, the table name is taken from the\n            DataFrame's index name (``df.index.name`` attribute).\n\n            If ``table_name_col`` is an integer, it is"" interpreted as the index\n            of the column starting from ``0``. The index of the column can be\n            negative, in which case it is interpreted as an offset from the end\n            of the DataFrame. E.g. ``-1`` is the last column.\n        :type table_name_col: str or int or None\n\n        :param symbols: The columns to be serialized as symbols.\n        \n            If ``'auto'`` (default), all columns of dtype ``'categorical'`` are\n            serialized as symbols. If ``True``, all ``str`` columns are\n            serialized as symbols. If ``False``, no columns are serialized as\n            symbols.\n            \n            The list of symbols can also be specified explicitly as a ``list``\n            of column names (``str``) or indices (``int``). Integer indices\n            start at ``0`` and can be negative, offset from the end of the\n            DataFrame. E.g. ``-1`` is the last column.\n\n            Only columns containing strings can be serialized as symbols.\n\n        :type symbols: str or bool or list[str] or list[int]\n\n        :param at: The designated timestamp of the rows.\n        \n            You can specify a single value for all rows or column name or index.\n            If ``ServerTimestamp``, timestamp is assigned by the server for all rows.\n            To pass in a timestamp explicitly as an integer use the\n            ``TimestampNanos`` wrapper type. To get the current timestamp,\n            use ``TimestampNanos.now()``.\n            When passing a ``datetime.datetime`` object, the timestamp is\n            converted to nanoseconds.\n            A naive ``datetime`` object is interpreted as UTC \342\200\224 never\n            your machine's local timezone \342\200\224 and a ``UserWarning`` is\n            emitted once per process\n            (call ``datetime.datetime.now(tz=datetime.timezone.utc)``\n            for the current timestamp to\n            avoid bugs).\n\n            To specify a different times""tamp for each row, pass in a column name\n            (``str``) or index (``int``, 0-based index, negative index\n            supported): In this case, the column needs to be of dtype\n            ``datetime64[ns]`` (assumed to be in the **UTC timezone** and not\n            local, due to differences in Pandas and Python datetime handling) or\n            ``datetime64[ns, tz]``. When a timezone is specified in the column,\n            it is converted to UTC automatically.\n\n            A timestamp column can also contain ``None`` values. The server will\n            assign the current timestamp to those rows.\n\n            **Note**: All timestamps are always converted to nanoseconds and in\n            the UTC timezone. Timezone information is dropped before sending and\n            QuestDB will not store any timezone information.\n        :type at: TimestampNanos, datetime.datetime, int or str or None\n\n        **Note**: It is an error to specify both ``table_name`` and\n        ``table_name_col``.\n\n        **Note**: The \"index\" column of the DataFrame is never serialized,\n        even if it is named.\n\n        Example:\n\n        .. code-block:: python\n\n            import pandas as pd\n            import questdb as qi\n\n            buf = qi.ingress.Buffer(protocol_version=2)\n            # ...\n\n            df = pd.DataFrame({\n                'location': ['London', 'Managua', 'London'],\n                'temperature': [24.5, 35.0, 25.5],\n                'humidity': [0.5, 0.6, 0.45],\n                'ts': pd.date_range('2021-07-01', periods=3)})\n            buf.dataframe(\n                df, table_name='weather', at='ts', symbols=['location'])\n\n            # ...\n            sender.flush(buf)\n\n        **Pandas to ILP datatype mappings**\n\n        .. seealso:: https://questdb.com/docs/reference/api/ilp/columnset-types/\n\n        .. list-table:: Pandas Mappings\n            :header-rows: 1\n\n            * - Pandas ``dtype``\n              - N""ulls\n              - ILP Datatype\n            * - ``'bool'``\n              - N\n              - ``BOOLEAN``\n            * - ``'boolean'``\n              - N **\316\261**\n              - ``BOOLEAN``\n            * - ``'object'`` (``bool`` objects)\n              - N **\316\261**\n              - ``BOOLEAN``\n            * - ``'uint8'``\n              - N\n              - ``INTEGER``\n            * - ``'int8'``\n              - N\n              - ``INTEGER``\n            * - ``'uint16'``\n              - N\n              - ``INTEGER``\n            * - ``'int16'``\n              - N\n              - ``INTEGER``\n            * - ``'uint32'``\n              - N\n              - ``INTEGER``\n            * - ``'int32'``\n              - N\n              - ``INTEGER``\n            * - ``'uint64'``\n              - N\n              - ``INTEGER`` **\316\262**\n            * - ``'int64'``\n              - N\n              - ``INTEGER``\n            * - ``'UInt8'``\n              - Y\n              - ``INTEGER``\n            * - ``'Int8'``\n              - Y\n              - ``INTEGER``\n            * - ``'UInt16'``\n              - Y\n              - ``INTEGER``\n            * - ``'Int16'``\n              - Y\n              - ``INTEGER``\n            * - ``'UInt32'``\n              - Y\n              - ``INTEGER``\n            * - ``'Int32'``\n              - Y\n              - ``INTEGER``\n            * - ``'UInt64'``\n              - Y\n              - ``INTEGER`` **\316\262**\n            * - ``'Int64'``\n              - Y\n              - ``INTEGER``\n            * - ``'object'`` (``int`` objects)\n              - Y\n              - ``INTEGER`` **\316\262**\n            * - ``'float32'`` **\316\263**\n              - Y (``NaN``)\n              - ``FLOAT``\n            * - ``'float64'``\n              - Y (``NaN``)\n              - ``FLOAT``\n            * - ``'object'`` (``float`` objects)\n              - Y (``NaN``)\n              - ``FLOAT``\n            * - ``'str""ing'`` (``str`` objects)\n              - Y\n              - ``STRING`` (default), ``SYMBOL`` via ``symbols`` arg. **\316\264**\n            * - ``'string[pyarrow]'``\n              - Y\n              - ``STRING`` (default), ``SYMBOL`` via ``symbols`` arg. **\316\264**\n            * - ``'category'`` (``str`` objects) **\316\265**\n              - Y\n              - ``SYMBOL`` (default), ``STRING`` via ``symbols`` arg. **\316\264**\n            * - ``'object'`` (``str`` objects)\n              - Y\n              - ``STRING`` (default), ``SYMBOL`` via ``symbols`` arg. **\316\264**\n            * - ``'datetime64[ns]'``\n              - Y\n              - ``TIMESTAMP`` **\316\266**\n            * - ``'datetime64[ns, tz]'``\n              - Y\n              - ``TIMESTAMP`` **\316\266**\n            * - ``'object'`` (``Decimal`` objects)\n              - Y (``NaN``)\n              - ``DECIMAL``\n\n        .. note::\n\n            * **\316\261**: Note some pandas dtypes allow nulls (e.g. ``'boolean'``),\n              where the QuestDB database does not.\n\n            * **\316\262**: The valid range for integer values is -2^63 to 2^63-1.\n              Any ``'uint64'``, ``'UInt64'`` or python ``int`` object values\n              outside this range will raise an error during serialization.\n\n            * **\316\263**: Upcast to 64-bit float during serialization.\n\n            * **\316\264**: Columns containing strings can also be used to specify the\n              table name. See ``table_name_col``.\n\n            * **\316\265**: We only support categories containing strings. If the\n              category contains non-string values, an error will be raised.\n\n            * **\316\266**: The '.dataframe()' method only supports datetimes with\n              nanosecond precision. The designated timestamp column (see ``at``\n              parameter) maintains the nanosecond precision, whilst values\n              stored as columns have their precision truncated to micros""econds.\n              All dates are sent as UTC and any additional timezone information\n              is dropped. If no timezone is specified, we follow\n              the pandas convention of assuming the timezone is UTC.\n              Datetimes before 1970-01-01 00:00:00 UTC are not supported.\n              If a datetime value is specified as ``None`` (``NaT``), it is\n              interpreted as the current QuestDB server time set on receipt of\n              message.\n\n        **Error Handling and Recovery**\n\n        In case an exception is raised during dataframe serialization, the\n        buffer is left in its previous state.\n        The buffer remains in a valid state and can be used for further calls\n        even after an error.\n\n        For clarification, as an example, if an invalid ``None``\n        value appears at the 3rd row for a ``bool`` column, neither the 3rd nor\n        the preceding rows are added to the buffer.\n\n        **Note**: This differs from the :func:`Sender.dataframe <questdb.Sender.dataframe>` method, which\n        modifies this guarantee due to its ``auto_flush`` logic.\n\n        **Performance Considerations**\n\n        The Python GIL is released during serialization if it is not needed.\n        If any column requires the GIL, the entire serialization is done whilst\n        holding the GIL.\n\n        Column types that require the GIL are:\n\n        * Columns of ``str``, ``float`` or ``int`` or ``float`` Python objects.\n        * The ``'string[python]'`` dtype.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Buffer_21dataframe = {"dataframe", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Buffer_21dataframe, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Buffer_20dataframe};
static PyObject *__pyx_pw_7questdb_7_client_6Buffer_21dataframe(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_df = 0;
  PyObject *__pyx_v_table_name = 0;
  PyObject *__pyx_v_table_name_col = 0;
  PyObject *__pyx_v_symbols = 0;
  PyObject *__pyx_v_at = 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("dataframe (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_df_2,&__pyx_mstate_global->__pyx_n_u_at,&__pyx_mstate_global->__pyx_n_u_table_name,&__pyx_mstate_global->__pyx_n_u_table_name_col,&__pyx_mstate_global->__pyx_n_u_symbols,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(0, 2632, __pyx_L3_error)
    if (likely(__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(0, 2632, __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, "dataframe", 0) < (0)) __PYX_ERR(0, 2632, __pyx_L3_error)
/* … */
  /* 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_6Buffer_20dataframe(struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_self, PyObject *__pyx_v_df, PyObject *__pyx_v_table_name, PyObject *__pyx_v_table_name_col, PyObject *__pyx_v_symbols, PyObject *__pyx_v_at) {
  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.Buffer.dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_4 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2632, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
/* … */
  __pyx_t_16 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2632, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_table_name, __pyx_mstate_global->__pyx_kp_u_Optional_str) < (0)) __PYX_ERR(0, 2632, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_table_name_col, __pyx_mstate_global->__pyx_kp_u_Union_None_int_str) < (0)) __PYX_ERR(0, 2632, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_kp_u_Union_str_bool_List_int_List_str) < (0)) __PYX_ERR(0, 2632, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_at, __pyx_mstate_global->__pyx_kp_u_Union_ServerTimestampType_int_st) < (0)) __PYX_ERR(0, 2632, __pyx_L1_error)
  __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Buffer_21dataframe, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer_dataframe, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[191])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 2632, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25);
  #endif
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_25, __pyx_t_4);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_25, __pyx_t_16);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, __pyx_mstate_global->__pyx_n_u_dataframe, __pyx_t_25) < (0)) __PYX_ERR(0, 2632, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 02633:             self,
 02634:             df,  # : pd.DataFrame
 02635:             *,
+02636:             table_name: Optional[str] = None,
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_table_name, Py_None) < (0)) __PYX_ERR(0, 2632, __pyx_L1_error)
+02637:             table_name_col: Union[None, int, str] = None,
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_n_u_auto));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("dataframe", 1, 1, 1, i); __PYX_ERR(0, 2632, __pyx_L3_error) }
      }
      for (Py_ssize_t i = 1; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseKeywordRequired("dataframe", *(__pyx_pyargnames[i - 0])); __PYX_ERR(0, 2632, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      __Pyx_RaiseKeywordRequired("dataframe", __pyx_mstate_global->__pyx_n_u_at); __PYX_ERR(0, 2632, __pyx_L3_error)
    }
    __pyx_v_df = values[0];
    __pyx_v_at = values[1];
    __pyx_v_table_name = ((PyObject*)values[2]);
    __pyx_v_table_name_col = values[3];
    __pyx_v_symbols = values[4];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("dataframe", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 2632, __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.Buffer.dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_table_name), (&PyUnicode_Type), 1, "table_name", 2))) __PYX_ERR(0, 2636, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_6Buffer_20dataframe(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_v_self), __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at);
/* … */
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_table_name_col, Py_None) < (0)) __PYX_ERR(0, 2632, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_n_u_auto) < (0)) __PYX_ERR(0, 2632, __pyx_L1_error)
 02638:             symbols: Union[str, bool, List[int], List[str]] = 'auto',
 02639:             at: Union[ServerTimestampType, int, str, TimestampNanos, datetime.datetime]):
 02640:         """
 02641:         Add a pandas DataFrame to the buffer.
 02642: 
 02643:         Also see :func:`Sender.dataframe <questdb.Sender.dataframe>` if you
 02644:         are not using the buffer explicitly. Over ILP and QWP/UDP it accepts
 02645:         the arguments shown here and adds auto-flushing. Over QWP/WebSocket
 02646:         it instead uses the direct columnar path, additionally accepting
 02647:         ``max_rows_per_batch`` and ``schema_overrides``; see
 02648:         :meth:`QuestDB.dataframe <questdb.QuestDB.dataframe>` for that path's
 02649:         supported column types and arguments.
 02650: 
 02651:         Requires ``pandas`` and ``numpy``. ``pyarrow`` is only needed
 02652:         when the frame contains ``pd.ArrowDtype`` / ``pd.Categorical`` /
 02653:         ``string`` dtype columns — purely NumPy / object dtypes work
 02654:         without it.
 02655: 
 02656:         Adding a dataframe can trigger auto-flushing behaviour,
 02657:         even between rows of the same dataframe. To avoid this, you can
 02658:         use HTTP and transactions (see :func:`Sender.transaction <questdb.Sender.transaction>`).
 02659: 
 02660:         :param df: The pandas DataFrame to serialize to the buffer.
 02661:         :type df: pandas.DataFrame
 02662: 
 02663:         :param table_name: The name of the table to which the rows belong.
 02664: 
 02665:             If ``None``, the table name is taken from the ``table_name_col``
 02666:             parameter. If both ``table_name`` and ``table_name_col`` are
 02667:             ``None``, the table name is taken from the DataFrame's index
 02668:             name (``df.index.name`` attribute).
 02669:         :type table_name: str or None
 02670: 
 02671:         :param table_name_col: The name or index of the column in the DataFrame
 02672:             that contains the table name.
 02673:             
 02674:             If ``None``, the table name is taken
 02675:             from the ``table_name`` parameter. If both ``table_name`` and
 02676:             ``table_name_col`` are ``None``, the table name is taken from the
 02677:             DataFrame's index name (``df.index.name`` attribute).
 02678: 
 02679:             If ``table_name_col`` is an integer, it is interpreted as the index
 02680:             of the column starting from ``0``. The index of the column can be
 02681:             negative, in which case it is interpreted as an offset from the end
 02682:             of the DataFrame. E.g. ``-1`` is the last column.
 02683:         :type table_name_col: str or int or None
 02684: 
 02685:         :param symbols: The columns to be serialized as symbols.
 02686:         
 02687:             If ``'auto'`` (default), all columns of dtype ``'categorical'`` are
 02688:             serialized as symbols. If ``True``, all ``str`` columns are
 02689:             serialized as symbols. If ``False``, no columns are serialized as
 02690:             symbols.
 02691:             
 02692:             The list of symbols can also be specified explicitly as a ``list``
 02693:             of column names (``str``) or indices (``int``). Integer indices
 02694:             start at ``0`` and can be negative, offset from the end of the
 02695:             DataFrame. E.g. ``-1`` is the last column.
 02696: 
 02697:             Only columns containing strings can be serialized as symbols.
 02698: 
 02699:         :type symbols: str or bool or list[str] or list[int]
 02700: 
 02701:         :param at: The designated timestamp of the rows.
 02702:         
 02703:             You can specify a single value for all rows or column name or index.
 02704:             If ``ServerTimestamp``, timestamp is assigned by the server for all rows.
 02705:             To pass in a timestamp explicitly as an integer use the
 02706:             ``TimestampNanos`` wrapper type. To get the current timestamp,
 02707:             use ``TimestampNanos.now()``.
 02708:             When passing a ``datetime.datetime`` object, the timestamp is
 02709:             converted to nanoseconds.
 02710:             A naive ``datetime`` object is interpreted as UTC — never
 02711:             your machine's local timezone — and a ``UserWarning`` is
 02712:             emitted once per process
 02713:             (call ``datetime.datetime.now(tz=datetime.timezone.utc)``
 02714:             for the current timestamp to
 02715:             avoid bugs).
 02716: 
 02717:             To specify a different timestamp for each row, pass in a column name
 02718:             (``str``) or index (``int``, 0-based index, negative index
 02719:             supported): In this case, the column needs to be of dtype
 02720:             ``datetime64[ns]`` (assumed to be in the **UTC timezone** and not
 02721:             local, due to differences in Pandas and Python datetime handling) or
 02722:             ``datetime64[ns, tz]``. When a timezone is specified in the column,
 02723:             it is converted to UTC automatically.
 02724: 
 02725:             A timestamp column can also contain ``None`` values. The server will
 02726:             assign the current timestamp to those rows.
 02727: 
 02728:             **Note**: All timestamps are always converted to nanoseconds and in
 02729:             the UTC timezone. Timezone information is dropped before sending and
 02730:             QuestDB will not store any timezone information.
 02731:         :type at: TimestampNanos, datetime.datetime, int or str or None
 02732: 
 02733:         **Note**: It is an error to specify both ``table_name`` and
 02734:         ``table_name_col``.
 02735: 
 02736:         **Note**: The "index" column of the DataFrame is never serialized,
 02737:         even if it is named.
 02738: 
 02739:         Example:
 02740: 
 02741:         .. code-block:: python
 02742: 
 02743:             import pandas as pd
 02744:             import questdb as qi
 02745: 
 02746:             buf = qi.ingress.Buffer(protocol_version=2)
 02747:             # ...
 02748: 
 02749:             df = pd.DataFrame({
 02750:                 'location': ['London', 'Managua', 'London'],
 02751:                 'temperature': [24.5, 35.0, 25.5],
 02752:                 'humidity': [0.5, 0.6, 0.45],
 02753:                 'ts': pd.date_range('2021-07-01', periods=3)})
 02754:             buf.dataframe(
 02755:                 df, table_name='weather', at='ts', symbols=['location'])
 02756: 
 02757:             # ...
 02758:             sender.flush(buf)
 02759: 
 02760:         **Pandas to ILP datatype mappings**
 02761: 
 02762:         .. seealso:: https://questdb.com/docs/reference/api/ilp/columnset-types/
 02763: 
 02764:         .. list-table:: Pandas Mappings
 02765:             :header-rows: 1
 02766: 
 02767:             * - Pandas ``dtype``
 02768:               - Nulls
 02769:               - ILP Datatype
 02770:             * - ``'bool'``
 02771:               - N
 02772:               - ``BOOLEAN``
 02773:             * - ``'boolean'``
 02774:               - N **α**
 02775:               - ``BOOLEAN``
 02776:             * - ``'object'`` (``bool`` objects)
 02777:               - N **α**
 02778:               - ``BOOLEAN``
 02779:             * - ``'uint8'``
 02780:               - N
 02781:               - ``INTEGER``
 02782:             * - ``'int8'``
 02783:               - N
 02784:               - ``INTEGER``
 02785:             * - ``'uint16'``
 02786:               - N
 02787:               - ``INTEGER``
 02788:             * - ``'int16'``
 02789:               - N
 02790:               - ``INTEGER``
 02791:             * - ``'uint32'``
 02792:               - N
 02793:               - ``INTEGER``
 02794:             * - ``'int32'``
 02795:               - N
 02796:               - ``INTEGER``
 02797:             * - ``'uint64'``
 02798:               - N
 02799:               - ``INTEGER`` **β**
 02800:             * - ``'int64'``
 02801:               - N
 02802:               - ``INTEGER``
 02803:             * - ``'UInt8'``
 02804:               - Y
 02805:               - ``INTEGER``
 02806:             * - ``'Int8'``
 02807:               - Y
 02808:               - ``INTEGER``
 02809:             * - ``'UInt16'``
 02810:               - Y
 02811:               - ``INTEGER``
 02812:             * - ``'Int16'``
 02813:               - Y
 02814:               - ``INTEGER``
 02815:             * - ``'UInt32'``
 02816:               - Y
 02817:               - ``INTEGER``
 02818:             * - ``'Int32'``
 02819:               - Y
 02820:               - ``INTEGER``
 02821:             * - ``'UInt64'``
 02822:               - Y
 02823:               - ``INTEGER`` **β**
 02824:             * - ``'Int64'``
 02825:               - Y
 02826:               - ``INTEGER``
 02827:             * - ``'object'`` (``int`` objects)
 02828:               - Y
 02829:               - ``INTEGER`` **β**
 02830:             * - ``'float32'`` **γ**
 02831:               - Y (``NaN``)
 02832:               - ``FLOAT``
 02833:             * - ``'float64'``
 02834:               - Y (``NaN``)
 02835:               - ``FLOAT``
 02836:             * - ``'object'`` (``float`` objects)
 02837:               - Y (``NaN``)
 02838:               - ``FLOAT``
 02839:             * - ``'string'`` (``str`` objects)
 02840:               - Y
 02841:               - ``STRING`` (default), ``SYMBOL`` via ``symbols`` arg. **δ**
 02842:             * - ``'string[pyarrow]'``
 02843:               - Y
 02844:               - ``STRING`` (default), ``SYMBOL`` via ``symbols`` arg. **δ**
 02845:             * - ``'category'`` (``str`` objects) **ε**
 02846:               - Y
 02847:               - ``SYMBOL`` (default), ``STRING`` via ``symbols`` arg. **δ**
 02848:             * - ``'object'`` (``str`` objects)
 02849:               - Y
 02850:               - ``STRING`` (default), ``SYMBOL`` via ``symbols`` arg. **δ**
 02851:             * - ``'datetime64[ns]'``
 02852:               - Y
 02853:               - ``TIMESTAMP`` **ζ**
 02854:             * - ``'datetime64[ns, tz]'``
 02855:               - Y
 02856:               - ``TIMESTAMP`` **ζ**
 02857:             * - ``'object'`` (``Decimal`` objects)
 02858:               - Y (``NaN``)
 02859:               - ``DECIMAL``
 02860: 
 02861:         .. note::
 02862: 
 02863:             * **α**: Note some pandas dtypes allow nulls (e.g. ``'boolean'``),
 02864:               where the QuestDB database does not.
 02865: 
 02866:             * **β**: The valid range for integer values is -2^63 to 2^63-1.
 02867:               Any ``'uint64'``, ``'UInt64'`` or python ``int`` object values
 02868:               outside this range will raise an error during serialization.
 02869: 
 02870:             * **γ**: Upcast to 64-bit float during serialization.
 02871: 
 02872:             * **δ**: Columns containing strings can also be used to specify the
 02873:               table name. See ``table_name_col``.
 02874: 
 02875:             * **ε**: We only support categories containing strings. If the
 02876:               category contains non-string values, an error will be raised.
 02877: 
 02878:             * **ζ**: The '.dataframe()' method only supports datetimes with
 02879:               nanosecond precision. The designated timestamp column (see ``at``
 02880:               parameter) maintains the nanosecond precision, whilst values
 02881:               stored as columns have their precision truncated to microseconds.
 02882:               All dates are sent as UTC and any additional timezone information
 02883:               is dropped. If no timezone is specified, we follow
 02884:               the pandas convention of assuming the timezone is UTC.
 02885:               Datetimes before 1970-01-01 00:00:00 UTC are not supported.
 02886:               If a datetime value is specified as ``None`` (``NaT``), it is
 02887:               interpreted as the current QuestDB server time set on receipt of
 02888:               message.
 02889: 
 02890:         **Error Handling and Recovery**
 02891: 
 02892:         In case an exception is raised during dataframe serialization, the
 02893:         buffer is left in its previous state.
 02894:         The buffer remains in a valid state and can be used for further calls
 02895:         even after an error.
 02896: 
 02897:         For clarification, as an example, if an invalid ``None``
 02898:         value appears at the 3rd row for a ``bool`` column, neither the 3rd nor
 02899:         the preceding rows are added to the buffer.
 02900: 
 02901:         **Note**: This differs from the :func:`Sender.dataframe <questdb.Sender.dataframe>` method, which
 02902:         modifies this guarantee due to its ``auto_flush`` logic.
 02903: 
 02904:         **Performance Considerations**
 02905: 
 02906:         The Python GIL is released during serialization if it is not needed.
 02907:         If any column requires the GIL, the entire serialization is done whilst
 02908:         holding the GIL.
 02909: 
 02910:         Column types that require the GIL are:
 02911: 
 02912:         * Columns of ``str``, ``float`` or ``int`` or ``float`` Python objects.
 02913:         * The ``'string[python]'`` dtype.
 02914:         """
+02915:         if at is None:
  __pyx_t_1 = (__pyx_v_at == Py_None);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+02916:             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(0, 2916, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+02917:                 QuestDBErrorCode.InvalidTimestamp,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2917, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2917, __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_at_must_be_of_type_TimestampNan};
      __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(0, 2916, __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(0, 2916, __pyx_L1_error)
 02918:                 "`at` must be of type TimestampNanos, datetime, or ServerTimestamp"
 02919:             )
+02920:         self._check_impl()
  __pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__check_impl(__pyx_v_self); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2920, __pyx_L1_error)
 02921:         # Refused before the borrow below, as `_dataframe` would refuse it
 02922:         # after: a frame this call came back into from its own Python keeps
 02923:         # the borrow it holds.
+02924:         self._check_not_in_row('dataframe')
  __pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_dataframe, NULL); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2924, __pyx_L1_error)
+02925:         self._begin_frame_borrow()
  __pyx_f_7questdb_7_client_6Buffer__begin_frame_borrow(__pyx_v_self);
+02926:         try:
  /*try:*/ {
+02927:             _dataframe(
    __pyx_t_8 = __pyx_f_7questdb_7_client__dataframe(__pyx_v_self, __pyx_f_7questdb_7_client_auto_flush_blank(), __pyx_v_self->_impl, __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2927, __pyx_L5_error)
  }
 02928:                 self,
 02929:                 auto_flush_blank(),
 02930:                 self._impl,
 02931:                 df,
 02932:                 table_name,
 02933:                 table_name_col,
 02934:                 symbols,
 02935:                 at)
 02936:         finally:
+02937:             self._end_frame_borrow()
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_f_7questdb_7_client_6Buffer__end_frame_borrow(__pyx_v_self);
/* … */
        __pyx_f_7questdb_7_client_6Buffer__end_frame_borrow(__pyx_v_self);
+02938:             _oidc_raise_unscheduled_main()
      __pyx_t_8 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2938, __pyx_L1_error)
      goto __pyx_L6;
    }
    __pyx_L5_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 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_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
      if ( unlikely(__Pyx_GetException(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14) < 0)) __Pyx_ErrFetch(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
      __Pyx_XGOTREF(__pyx_t_12);
      __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_t_9 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_11 = __pyx_filename;
      {
/* … */
        __pyx_t_8 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 2938, __pyx_L8_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);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_XGIVEREF(__pyx_t_14);
      __Pyx_ErrRestore(__pyx_t_12, __pyx_t_13, __pyx_t_14);
      __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
      __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_11;
      goto __pyx_L1_error;
      __pyx_L8_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);
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L6:;
  }
+02939:         return self
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;
 02940: 
 02941: 
 02942: _FLUSH_FMT = ('{} - See https://py-questdb-client.readthedocs.io/en/'
+02943:     'v' + VERSION +
  __Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_VERSION); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 2943, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __pyx_t_16 = PyNumber_Add(__pyx_mstate_global->__pyx_kp_u_See_https_py_questdb_client_rea, __pyx_t_25); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 2943, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __pyx_t_25 = PyNumber_Add(__pyx_t_16, __pyx_mstate_global->__pyx_kp_u_troubleshooting_html_inspecting); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 2943, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_FLUSH_FMT, __pyx_t_25) < (0)) __PYX_ERR(0, 2942, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 02944:     '/troubleshooting.html#inspecting-and-debugging-errors#flush-failed')
 02945: 
 02946: 
+02947: cdef uint64_t _timedelta_to_millis(cp_timedelta timedelta):
static uint64_t __pyx_f_7questdb_7_client__timedelta_to_millis(PyDateTime_Delta *__pyx_v_timedelta) {
  int64_t __pyx_v_millis;
  uint64_t __pyx_r;
/* … */
  /* 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_8);
  __Pyx_AddTraceback("questdb._client._timedelta_to_millis", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1LL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02948:     """
 02949:     Convert a timedelta to milliseconds.
 02950:     """
 02951:     cdef int64_t millis = (
+02952:         <int64_t>timedelta.days * 86_400_000 +
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_timedelta), __pyx_mstate_global->__pyx_n_u_days); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2952, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyLong_As_int64_t(__pyx_t_1); if (unlikely((__pyx_t_2 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2952, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_t_1 = __Pyx_PyLong_From_int64_t(((((int64_t)__pyx_t_2) * 0x5265C00) + (((int64_t)__pyx_t_3) * 0x3E8))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2952, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
+02953:         <int64_t>timedelta.seconds * 1000 +
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_timedelta), __pyx_mstate_global->__pyx_n_u_seconds); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2953, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyLong_As_int64_t(__pyx_t_1); if (unlikely((__pyx_t_3 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2953, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_t_4 = PyNumber_Add(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2953, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_3 = __Pyx_PyLong_As_int64_t(__pyx_t_4); if (unlikely((__pyx_t_3 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2953, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_millis = __pyx_t_3;
+02954:         timedelta.microseconds // 1000)
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_timedelta), __pyx_mstate_global->__pyx_n_u_microseconds); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2954, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyLong_FloorDivideObjC(__pyx_t_4, __pyx_mstate_global->__pyx_int_1000, 0x3E8, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2954, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+02955:     if millis < 0:
  __pyx_t_6 = (__pyx_v_millis < 0);
  if (unlikely(__pyx_t_6)) {
/* … */
  }
+02956:         raise ValueError(
    __pyx_t_5 = NULL;
+02957:             f'Negative timedelta not allowed: {timedelta!r}.')
    __pyx_t_1 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(((PyObject *)__pyx_v_timedelta)), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2957, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_7[0] = __pyx_mstate_global->__pyx_kp_u_Negative_timedelta_not_allowed;
    __pyx_t_7[1] = __pyx_t_1;
    __pyx_t_7[2] = __pyx_mstate_global->__pyx_kp_u__2;
    __pyx_t_8 = __Pyx_PyUnicode_Join(__pyx_t_7, 3, 32 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1));
    if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2957, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_9 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_8};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_9, (2-__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;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2956, __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(0, 2956, __pyx_L1_error)
+02958:     if millis == 0 and timedelta:
  __pyx_t_10 = (__pyx_v_millis == 0);
  if (__pyx_t_10) {
  } else {
    __pyx_t_6 = __pyx_t_10;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_10 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_timedelta)); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 2958, __pyx_L1_error)
  __pyx_t_6 = __pyx_t_10;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_6) {
/* … */
  }
 02959:         # Never silently turn a positive finite duration into 0ms, which
 02960:         # several options interpret as "no deadline".
+02961:         return 1
    __pyx_r = 1;
    goto __pyx_L0;
+02962:     return millis
  __pyx_r = __pyx_v_millis;
  goto __pyx_L0;
 02963: 
 02964: 
+02965: cdef bint _is_int_not_bool(object value):
static int __pyx_f_7questdb_7_client__is_int_not_bool(PyObject *__pyx_v_value) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 02966:     """A Python ``int`` that is not a boolean.
 02967: 
 02968:     For the connection options, whose values come from a conf string or
 02969:     a literal in the caller's code. The claim vocabulary reads its
 02970:     numbers out of arrays and pandas cells too, so it uses
 02971:     `_is_integral_not_bool` instead.
 02972:     """
+02973:     return isinstance(value, int) and not isinstance(value, bool)
  __pyx_t_2 = PyLong_Check(__pyx_v_value); 
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); 
  __pyx_t_3 = (!__pyx_t_2);
  __pyx_t_1 = __pyx_t_3;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 02974: 
 02975: 
+02976: cdef bint _is_integral_not_bool(object value):
static int __pyx_f_7questdb_7_client__is_integral_not_bool(PyObject *__pyx_v_value) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client._is_integral_not_bool", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 02977:     """A whole number that is not a boolean.
 02978: 
 02979:     The one predicate for every number in the round-trip claim
 02980:     vocabulary: the claim version, a geohash precision wherever it is
 02981:     read, the ``schema_overrides`` geohash bits, and the arguments the
 02982:     QWP-only wrapper classes take. Those numbers arrive from array
 02983:     metadata and from pandas cells as often as from a literal, and
 02984:     `numpy.int64` is what a claim rebuilt from array metadata carries,
 02985:     so holding a field to `int` alone drops it over its type.
 02986: 
 02987:     ``True == 1``, so a boolean would otherwise read as a version, a
 02988:     one-bit precision, or a geohash of zero bits. Identity settles it:
 02989:     `bool` cannot be subclassed, and `numpy.bool_` is not registered as
 02990:     `numbers.Integral`.
 02991: 
 02992:     A caller of this holds the value to a range next, and hands it on
 02993:     to C. Both want a plain `int`, so each site coerces with `int()`
 02994:     once the predicate has passed.
 02995:     """
+02996:     return (value is not True and value is not False
  __pyx_t_2 = (__pyx_v_value != Py_True);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
/* … */
  __pyx_t_2 = (__pyx_v_value != Py_False);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
+02997:             and isinstance(value, _numbers.Integral))
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_numbers); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2997, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Integral); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2997, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_value, __pyx_t_4); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2997, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 02998: 
 02999: 
+03000: cdef int64_t auto_flush_rows_default(line_sender_protocol protocol):
static int64_t __pyx_f_7questdb_7_client_auto_flush_rows_default(enum line_sender_protocol __pyx_v_protocol) {
  int64_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client.auto_flush_rows_default", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1L;
  __pyx_L0:;
  return __pyx_r;
}
+03001:     if _is_http_protocol(protocol):
  __pyx_t_1 = __pyx_f_7questdb_7_client__is_http_protocol(__pyx_v_protocol); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3001, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+03002:         return 75000
    __pyx_r = 0x124F8;
    goto __pyx_L0;
 03003:     else:
+03004:         return 600
  /*else*/ {
    __pyx_r = 0x258;
    goto __pyx_L0;
  }
 03005: 
 03006: 
+03007: cdef void_int _parse_auto_flush(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__parse_auto_flush(enum line_sender_protocol __pyx_v_protocol, PyObject *__pyx_v_auto_flush, PyObject *__pyx_v_auto_flush_rows, PyObject *__pyx_v_auto_flush_bytes, PyObject *__pyx_v_auto_flush_interval, struct __pyx_t_7questdb_7_client_auto_flush_mode_t *__pyx_v_c_auto_flush, size_t __pyx_v_max_datagram_size) {
  __pyx_t_7questdb_7_client_void_int __pyx_r;
  __Pyx_INCREF(__pyx_v_auto_flush);
  __Pyx_INCREF(__pyx_v_auto_flush_rows);
  __Pyx_INCREF(__pyx_v_auto_flush_bytes);
  __Pyx_INCREF(__pyx_v_auto_flush_interval);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __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_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("questdb._client._parse_auto_flush", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_auto_flush);
  __Pyx_XDECREF(__pyx_v_auto_flush_rows);
  __Pyx_XDECREF(__pyx_v_auto_flush_bytes);
  __Pyx_XDECREF(__pyx_v_auto_flush_interval);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 03008:     line_sender_protocol protocol,
 03009:     object auto_flush,
 03010:     object auto_flush_rows,
 03011:     object auto_flush_bytes,
 03012:     object auto_flush_interval,
 03013:     auto_flush_mode_t* c_auto_flush,
 03014:     size_t max_datagram_size
 03015: ) except -1:
 03016:     # Set defaults.
+03017:     if auto_flush_rows is None:
  __pyx_t_1 = (__pyx_v_auto_flush_rows == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+03018:         auto_flush_rows = auto_flush_rows_default(protocol)
    __pyx_t_2 = __pyx_f_7questdb_7_client_auto_flush_rows_default(__pyx_v_protocol); if (unlikely(__pyx_t_2 == ((int64_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 3018, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyLong_From_int64_t(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3018, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_auto_flush_rows, __pyx_t_3);
    __pyx_t_3 = 0;
 03019: 
+03020:     if auto_flush_bytes is None:
  __pyx_t_1 = (__pyx_v_auto_flush_bytes == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+03021:         if _is_qwp_udp_protocol(protocol):
    __pyx_t_1 = __pyx_f_7questdb_7_client__is_qwp_udp_protocol(__pyx_v_protocol); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3021, __pyx_L1_error)
    if (__pyx_t_1) {
/* … */
      goto __pyx_L5;
    }
+03022:             auto_flush_bytes = max_datagram_size if max_datagram_size else 1400
      __pyx_t_1 = (__pyx_v_max_datagram_size != 0);
      if (__pyx_t_1) {
        __pyx_t_4 = __Pyx_PyLong_FromSize_t(__pyx_v_max_datagram_size); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3022, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_3 = __pyx_t_4;
        __pyx_t_4 = 0;
      } else {
        __Pyx_INCREF(__pyx_mstate_global->__pyx_int_1400);
        __pyx_t_3 = __pyx_mstate_global->__pyx_int_1400;
      }
      __Pyx_DECREF_SET(__pyx_v_auto_flush_bytes, __pyx_t_3);
      __pyx_t_3 = 0;
 03023:         else:
+03024:             auto_flush_bytes = False
    /*else*/ {
      __Pyx_INCREF(Py_False);
      __Pyx_DECREF_SET(__pyx_v_auto_flush_bytes, Py_False);
    }
    __pyx_L5:;
 03025: 
+03026:     if auto_flush_interval is None:
  __pyx_t_1 = (__pyx_v_auto_flush_interval == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+03027:         auto_flush_interval = 1000
    __Pyx_INCREF(__pyx_mstate_global->__pyx_int_1000);
    __Pyx_DECREF_SET(__pyx_v_auto_flush_interval, __pyx_mstate_global->__pyx_int_1000);
 03028: 
+03029:     if isinstance(auto_flush, str):
  __pyx_t_1 = PyUnicode_Check(__pyx_v_auto_flush); 
  if (__pyx_t_1) {
/* … */
  }
+03030:         if auto_flush == 'off':
    __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_auto_flush, __pyx_mstate_global->__pyx_n_u_off, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3030, __pyx_L1_error)
    if (__pyx_t_1) {
/* … */
      goto __pyx_L8;
    }
+03031:             auto_flush = False
      __Pyx_INCREF(Py_False);
      __Pyx_DECREF_SET(__pyx_v_auto_flush, Py_False);
+03032:         elif auto_flush == 'on':
    __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_auto_flush, __pyx_mstate_global->__pyx_n_u_on, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3032, __pyx_L1_error)
    if (likely(__pyx_t_1)) {
/* … */
      goto __pyx_L8;
    }
+03033:             auto_flush = True
      __Pyx_INCREF(Py_True);
      __Pyx_DECREF_SET(__pyx_v_auto_flush, Py_True);
 03034:         else:
+03035:             raise QuestDBError(
    /*else*/ {
      __pyx_t_4 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3035, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
+03036:                 QuestDBErrorCode.ConfigError,
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3036, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3036, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+03037:                 '"auto_flush" must be None, bool, "on" or "off", ' +
      __pyx_t_6 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_auto_flush_must_be_None_bool_on, __pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3037, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __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_7, __pyx_t_6};
        __pyx_t_3 = __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_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3035, __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(0, 3035, __pyx_L1_error)
    }
    __pyx_L8:;
+03038:                 f'not {auto_flush!r}')
      __pyx_t_6 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_auto_flush), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3038, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_8 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_not, __pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3038, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 03039: 
 03040:     # Normalise auto_flush parameters to ints or False.
+03041:     if isinstance(auto_flush_rows, str):
  __pyx_t_1 = PyUnicode_Check(__pyx_v_auto_flush_rows); 
  if (__pyx_t_1) {
/* … */
    goto __pyx_L9;
  }
+03042:         if auto_flush_rows == 'on':
    __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_auto_flush_rows, __pyx_mstate_global->__pyx_n_u_on, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3042, __pyx_L1_error)
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+03043:             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(0, 3043, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
+03044:                 QuestDBErrorCode.ConfigError,
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3044, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3044, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __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_4, __pyx_mstate_global->__pyx_kp_u_auto_flush_rows_cannot_be_on};
        __pyx_t_3 = __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_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3043, __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(0, 3043, __pyx_L1_error)
 03045:                 '"auto_flush_rows" cannot be "on"')
+03046:         elif auto_flush_rows == 'off':
    __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_auto_flush_rows, __pyx_mstate_global->__pyx_n_u_off, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3046, __pyx_L1_error)
    if (__pyx_t_1) {
/* … */
      goto __pyx_L10;
    }
+03047:             auto_flush_rows = False
      __Pyx_INCREF(Py_False);
      __Pyx_DECREF_SET(__pyx_v_auto_flush_rows, Py_False);
 03048:         else:
+03049:             auto_flush_rows = int(auto_flush_rows)
    /*else*/ {
      __pyx_t_3 = __Pyx_PyNumber_Int(__pyx_v_auto_flush_rows); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3049, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_auto_flush_rows, __pyx_t_3);
      __pyx_t_3 = 0;
    }
    __pyx_L10:;
+03050:     elif auto_flush_rows is False or _is_int_not_bool(auto_flush_rows):
  __pyx_t_10 = (__pyx_v_auto_flush_rows == Py_False);
  if (!__pyx_t_10) {
  } else {
    __pyx_t_1 = __pyx_t_10;
    goto __pyx_L11_bool_binop_done;
  }
  __pyx_t_10 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_auto_flush_rows); if (unlikely(__pyx_t_10 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3050, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_10;
  __pyx_L11_bool_binop_done:;
  if (likely(__pyx_t_1)) {
    goto __pyx_L9;
  }
 03051:         pass
 03052:     else:
+03053:         raise TypeError(
  /*else*/ {
    __pyx_t_6 = NULL;
+03054:             '"auto_flush_rows" must be an int, False or "off", ' +
    __pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_auto_flush_rows_must_be_an_int, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3054, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_9 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_4};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_9, (2-__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;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3053, __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(0, 3053, __pyx_L1_error)
  }
  __pyx_L9:;
+03055:             f'not {auto_flush_rows!r}')
    __pyx_t_4 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_auto_flush_rows), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3055, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_not, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3055, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 03056: 
+03057:     if isinstance(auto_flush_bytes, str):
  __pyx_t_1 = PyUnicode_Check(__pyx_v_auto_flush_bytes); 
  if (__pyx_t_1) {
/* … */
    goto __pyx_L13;
  }
+03058:         if auto_flush_bytes == 'on':
    __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_auto_flush_bytes, __pyx_mstate_global->__pyx_n_u_on, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3058, __pyx_L1_error)
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+03059:             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(0, 3059, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
+03060:                 QuestDBErrorCode.ConfigError,
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3060, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3060, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_9 = 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_9 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_auto_flush_bytes_cannot_be_on};
        __pyx_t_3 = __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_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3059, __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(0, 3059, __pyx_L1_error)
 03061:                 '"auto_flush_bytes" cannot be "on"')
+03062:         elif auto_flush_bytes == 'off':
    __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_auto_flush_bytes, __pyx_mstate_global->__pyx_n_u_off, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3062, __pyx_L1_error)
    if (__pyx_t_1) {
/* … */
      goto __pyx_L14;
    }
+03063:             auto_flush_bytes = False
      __Pyx_INCREF(Py_False);
      __Pyx_DECREF_SET(__pyx_v_auto_flush_bytes, Py_False);
 03064:         else:
+03065:             auto_flush_bytes = int(auto_flush_bytes)
    /*else*/ {
      __pyx_t_3 = __Pyx_PyNumber_Int(__pyx_v_auto_flush_bytes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3065, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_auto_flush_bytes, __pyx_t_3);
      __pyx_t_3 = 0;
    }
    __pyx_L14:;
+03066:     elif auto_flush_bytes is False or _is_int_not_bool(auto_flush_bytes):
  __pyx_t_10 = (__pyx_v_auto_flush_bytes == Py_False);
  if (!__pyx_t_10) {
  } else {
    __pyx_t_1 = __pyx_t_10;
    goto __pyx_L15_bool_binop_done;
  }
  __pyx_t_10 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_auto_flush_bytes); if (unlikely(__pyx_t_10 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3066, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_10;
  __pyx_L15_bool_binop_done:;
  if (likely(__pyx_t_1)) {
    goto __pyx_L13;
  }
 03067:         pass
 03068:     else:
+03069:         raise TypeError(
  /*else*/ {
    __pyx_t_6 = NULL;
+03070:             '"auto_flush_bytes" must be an int, False or "off", ' +
    __pyx_t_7 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_auto_flush_bytes_must_be_an_int, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3070, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_9 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_7};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__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_3)) __PYX_ERR(0, 3069, __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(0, 3069, __pyx_L1_error)
  }
  __pyx_L13:;
+03071:             f'not {auto_flush_bytes!r}')
    __pyx_t_7 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_auto_flush_bytes), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3071, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_not, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3071, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 03072: 
+03073:     if isinstance(auto_flush_interval, str):
  __pyx_t_1 = PyUnicode_Check(__pyx_v_auto_flush_interval); 
  if (__pyx_t_1) {
/* … */
    goto __pyx_L17;
  }
+03074:         if auto_flush_interval == 'on':
    __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_auto_flush_interval, __pyx_mstate_global->__pyx_n_u_on, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3074, __pyx_L1_error)
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+03075:             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(0, 3075, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
+03076:                 QuestDBErrorCode.ConfigError,
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3076, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3076, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_9 = 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_9 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_5, __pyx_mstate_global->__pyx_kp_u_auto_flush_interval_cannot_be_o};
        __pyx_t_3 = __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_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3075, __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(0, 3075, __pyx_L1_error)
 03077:                 '"auto_flush_interval" cannot be "on"')
+03078:         elif auto_flush_interval == 'off':
    __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_auto_flush_interval, __pyx_mstate_global->__pyx_n_u_off, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3078, __pyx_L1_error)
    if (__pyx_t_1) {
/* … */
      goto __pyx_L18;
    }
+03079:             auto_flush_interval = False
      __Pyx_INCREF(Py_False);
      __Pyx_DECREF_SET(__pyx_v_auto_flush_interval, Py_False);
 03080:         else:
+03081:             auto_flush_interval = int(auto_flush_interval)
    /*else*/ {
      __pyx_t_3 = __Pyx_PyNumber_Int(__pyx_v_auto_flush_interval); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3081, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_auto_flush_interval, __pyx_t_3);
      __pyx_t_3 = 0;
    }
    __pyx_L18:;
+03082:     elif auto_flush_interval is False or _is_int_not_bool(auto_flush_interval):
  __pyx_t_10 = (__pyx_v_auto_flush_interval == Py_False);
  if (!__pyx_t_10) {
  } else {
    __pyx_t_1 = __pyx_t_10;
    goto __pyx_L19_bool_binop_done;
  }
  __pyx_t_10 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_auto_flush_interval); if (unlikely(__pyx_t_10 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3082, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_10;
  __pyx_L19_bool_binop_done:;
  if (__pyx_t_1) {
    goto __pyx_L17;
  }
 03083:         pass
+03084:     elif isinstance(auto_flush_interval, cp_timedelta):
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_auto_flush_interval, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta); 
  if (likely(__pyx_t_1)) {
/* … */
    goto __pyx_L17;
  }
+03085:         auto_flush_interval = _timedelta_to_millis(auto_flush_interval)
    if (!(likely(((__pyx_v_auto_flush_interval) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_auto_flush_interval, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta))))) __PYX_ERR(0, 3085, __pyx_L1_error)
    __pyx_t_11 = __pyx_f_7questdb_7_client__timedelta_to_millis(((PyDateTime_Delta *)__pyx_v_auto_flush_interval)); if (unlikely(__pyx_t_11 == ((uint64_t)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 3085, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3085, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_auto_flush_interval, __pyx_t_3);
    __pyx_t_3 = 0;
 03086:     else:
+03087:         raise TypeError(
  /*else*/ {
    __pyx_t_6 = NULL;
+03088:             '"auto_flush_interval" must be an int, timedelta, False or "off", ' +
    __pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_auto_flush_interval_must_be_an, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3088, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_9 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_5};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__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_3)) __PYX_ERR(0, 3087, __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(0, 3087, __pyx_L1_error)
  }
  __pyx_L17:;
+03089:             f'not {auto_flush_interval!r}')
    __pyx_t_5 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_auto_flush_interval), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3089, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_not, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3089, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 03090: 
 03091:     # Coerce auto_flush to bool if None.
+03092:     if auto_flush is None:
  __pyx_t_1 = (__pyx_v_auto_flush == Py_None);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L21;
  }
 03093:         auto_flush = (
+03094:             (auto_flush_rows is not False) or
    __pyx_t_1 = (__pyx_v_auto_flush_rows != Py_False);
    if (!__pyx_t_1) {
    } else {
      __pyx_t_5 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3094, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = __pyx_t_5;
      __pyx_t_5 = 0;
      goto __pyx_L22_bool_binop_done;
    }
+03095:             (auto_flush_bytes is not False) or
    __pyx_t_1 = (__pyx_v_auto_flush_bytes != Py_False);
    if (!__pyx_t_1) {
    } else {
      __pyx_t_5 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3095, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = __pyx_t_5;
      __pyx_t_5 = 0;
      goto __pyx_L22_bool_binop_done;
    }
+03096:             (auto_flush_interval is not False))
    __pyx_t_1 = (__pyx_v_auto_flush_interval != Py_False);
    __pyx_t_5 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3096, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = __pyx_t_5;
    __pyx_t_5 = 0;
    __pyx_L22_bool_binop_done:;
    __Pyx_DECREF_SET(__pyx_v_auto_flush, __pyx_t_3);
    __pyx_t_3 = 0;
+03097:     elif not isinstance(auto_flush, bool):
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_auto_flush, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); 
  __pyx_t_10 = (!__pyx_t_1);
  if (unlikely(__pyx_t_10)) {
/* … */
  }
  __pyx_L21:;
+03098:         raise ValueError(
    __pyx_t_5 = NULL;
+03099:             '"auto_flush" must be None, bool, "on" or "off", ' +
    __pyx_t_6 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_auto_flush_must_be_None_bool_on, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3099, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_9 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_6};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_9, (2-__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;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3098, __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(0, 3098, __pyx_L1_error)
+03100:             f'not {auto_flush!r}')
    __pyx_t_6 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_auto_flush), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3100, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_not, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3100, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 03101: 
 03102:     # Validate auto_flush parameters.
+03103:     if auto_flush and \
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_auto_flush); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3103, __pyx_L1_error)
  if (__pyx_t_1) {
  } else {
    __pyx_t_10 = __pyx_t_1;
    goto __pyx_L26_bool_binop_done;
  }
/* … */
  if (unlikely(__pyx_t_10)) {
/* … */
  }
+03104:             (auto_flush_rows is False) and \
  __pyx_t_1 = (__pyx_v_auto_flush_rows == Py_False);
  if (__pyx_t_1) {
  } else {
    __pyx_t_10 = __pyx_t_1;
    goto __pyx_L26_bool_binop_done;
  }
+03105:             (auto_flush_bytes is False) and \
  __pyx_t_1 = (__pyx_v_auto_flush_bytes == Py_False);
  if (__pyx_t_1) {
  } else {
    __pyx_t_10 = __pyx_t_1;
    goto __pyx_L26_bool_binop_done;
  }
+03106:             (auto_flush_interval is False):
  __pyx_t_1 = (__pyx_v_auto_flush_interval == Py_False);
  __pyx_t_10 = __pyx_t_1;
  __pyx_L26_bool_binop_done:;
+03107:         raise ValueError(
    __pyx_t_6 = NULL;
    __pyx_t_9 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_auto_flush_is_enabled_but_no_ot};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3107, __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(0, 3107, __pyx_L1_error)
 03108:             '"auto_flush" is enabled but no other auto-flush '
 03109:             'parameters are enabled. Please set at least one of '
 03110:             '"auto_flush_rows", "auto_flush_bytes" or '
 03111:             '"auto_flush_interval".')
 03112: 
+03113:     if auto_flush_rows is not False and auto_flush_rows < 1:
  __pyx_t_1 = (__pyx_v_auto_flush_rows != Py_False);
  if (__pyx_t_1) {
  } else {
    __pyx_t_10 = __pyx_t_1;
    goto __pyx_L31_bool_binop_done;
  }
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_auto_flush_rows, __pyx_mstate_global->__pyx_int_1, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3113, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3113, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_10 = __pyx_t_1;
  __pyx_L31_bool_binop_done:;
  if (unlikely(__pyx_t_10)) {
/* … */
  }
+03114:         raise ValueError(
    __pyx_t_6 = NULL;
+03115:             '"auto_flush_rows" must be >= 1, '
    __pyx_t_7 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_auto_flush_rows_must_be_1_not, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3115, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_9 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_7};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__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_3)) __PYX_ERR(0, 3114, __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(0, 3114, __pyx_L1_error)
+03116:             f'not {auto_flush_rows}')
    __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_v_auto_flush_rows, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3116, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
 03117: 
+03118:     if auto_flush_bytes is not False and auto_flush_bytes < 1:
  __pyx_t_1 = (__pyx_v_auto_flush_bytes != Py_False);
  if (__pyx_t_1) {
  } else {
    __pyx_t_10 = __pyx_t_1;
    goto __pyx_L34_bool_binop_done;
  }
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_auto_flush_bytes, __pyx_mstate_global->__pyx_int_1, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3118, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3118, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_10 = __pyx_t_1;
  __pyx_L34_bool_binop_done:;
  if (unlikely(__pyx_t_10)) {
/* … */
  }
+03119:         raise ValueError(
    __pyx_t_7 = NULL;
+03120:             '"auto_flush_bytes" must be >= 1, '
    __pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_auto_flush_bytes_must_be_1_not, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3120, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_9 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_5};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3119, __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(0, 3119, __pyx_L1_error)
+03121:             f'not {auto_flush_bytes}')
    __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_v_auto_flush_bytes, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3121, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
 03122: 
+03123:     if auto_flush_interval is not False and auto_flush_interval < 1:
  __pyx_t_1 = (__pyx_v_auto_flush_interval != Py_False);
  if (__pyx_t_1) {
  } else {
    __pyx_t_10 = __pyx_t_1;
    goto __pyx_L37_bool_binop_done;
  }
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_auto_flush_interval, __pyx_mstate_global->__pyx_int_1, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3123, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3123, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_10 = __pyx_t_1;
  __pyx_L37_bool_binop_done:;
  if (unlikely(__pyx_t_10)) {
/* … */
  }
+03124:         raise ValueError(
    __pyx_t_5 = NULL;
+03125:             '"auto_flush_interval" must be >= 1, '
    __pyx_t_6 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_auto_flush_interval_must_be_1_n, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3125, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_9 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_6};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_9, (2-__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;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3124, __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(0, 3124, __pyx_L1_error)
+03126:             f'not {auto_flush_interval}')
    __pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_v_auto_flush_interval, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3126, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
 03127: 
 03128:     # Parse individual auto_flush parameters to C struct.
+03129:     c_auto_flush.enabled = auto_flush
  __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_auto_flush); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 3129, __pyx_L1_error)
  __pyx_v_c_auto_flush->enabled = __pyx_t_10;
 03130: 
+03131:     if auto_flush_rows is False:
  __pyx_t_10 = (__pyx_v_auto_flush_rows == Py_False);
  if (__pyx_t_10) {
/* … */
    goto __pyx_L39;
  }
+03132:         c_auto_flush.row_count = -1
    __pyx_v_c_auto_flush->row_count = -1L;
 03133:     else:
+03134:         c_auto_flush.row_count = auto_flush_rows
  /*else*/ {
    __pyx_t_2 = __Pyx_PyLong_As_int64_t(__pyx_v_auto_flush_rows); if (unlikely((__pyx_t_2 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3134, __pyx_L1_error)
    __pyx_v_c_auto_flush->row_count = __pyx_t_2;
  }
  __pyx_L39:;
 03135: 
+03136:     if auto_flush_bytes is False:
  __pyx_t_10 = (__pyx_v_auto_flush_bytes == Py_False);
  if (__pyx_t_10) {
/* … */
    goto __pyx_L40;
  }
+03137:         c_auto_flush.byte_count = -1
    __pyx_v_c_auto_flush->byte_count = -1L;
 03138:     else:
+03139:         c_auto_flush.byte_count = auto_flush_bytes
  /*else*/ {
    __pyx_t_2 = __Pyx_PyLong_As_int64_t(__pyx_v_auto_flush_bytes); if (unlikely((__pyx_t_2 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3139, __pyx_L1_error)
    __pyx_v_c_auto_flush->byte_count = __pyx_t_2;
  }
  __pyx_L40:;
 03140: 
+03141:     if auto_flush_interval is False:
  __pyx_t_10 = (__pyx_v_auto_flush_interval == Py_False);
  if (__pyx_t_10) {
/* … */
    goto __pyx_L41;
  }
+03142:         c_auto_flush.interval = -1
    __pyx_v_c_auto_flush->interval = -1L;
 03143:     else:
+03144:         c_auto_flush.interval = auto_flush_interval
  /*else*/ {
    __pyx_t_2 = __Pyx_PyLong_As_int64_t(__pyx_v_auto_flush_interval); if (unlikely((__pyx_t_2 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3144, __pyx_L1_error)
    __pyx_v_c_auto_flush->interval = __pyx_t_2;
  }
  __pyx_L41:;
 03145: 
 03146: 
+03147: cdef void_int _parse_pooled_auto_flush(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__parse_pooled_auto_flush(enum line_sender_protocol __pyx_v_protocol, PyObject *__pyx_v_auto_flush, PyObject *__pyx_v_auto_flush_rows, PyObject *__pyx_v_auto_flush_bytes, PyObject *__pyx_v_auto_flush_interval, struct __pyx_t_7questdb_7_client_auto_flush_mode_t *__pyx_v_c_auto_flush, int *__pyx_v_c_auto_flush_bytes_dynamic) {
  int __pyx_v_default_auto_flush_bytes;
  __pyx_t_7questdb_7_client_void_int __pyx_r;
  __Pyx_INCREF(__pyx_v_auto_flush_rows);
  __Pyx_INCREF(__pyx_v_auto_flush_bytes);
  __Pyx_INCREF(__pyx_v_auto_flush_interval);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client._parse_pooled_auto_flush", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_auto_flush_rows);
  __Pyx_XDECREF(__pyx_v_auto_flush_bytes);
  __Pyx_XDECREF(__pyx_v_auto_flush_interval);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 03148:     line_sender_protocol protocol,
 03149:     object auto_flush,
 03150:     object auto_flush_rows,
 03151:     object auto_flush_bytes,
 03152:     object auto_flush_interval,
 03153:     auto_flush_mode_t* c_auto_flush,
 03154:     bint* c_auto_flush_bytes_dynamic,
 03155: ) except -1:
 03156:     """Parse the QWP pool's Java-builder-compatible auto-flush policy."""
+03157:     cdef bint default_auto_flush_bytes = auto_flush_bytes is None
  __pyx_t_1 = (__pyx_v_auto_flush_bytes == Py_None);
  __pyx_v_default_auto_flush_bytes = __pyx_t_1;
+03158:     if auto_flush_rows is None:
  __pyx_t_1 = (__pyx_v_auto_flush_rows == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+03159:         auto_flush_rows = 1000
    __Pyx_INCREF(__pyx_mstate_global->__pyx_int_1000);
    __Pyx_DECREF_SET(__pyx_v_auto_flush_rows, __pyx_mstate_global->__pyx_int_1000);
+03160:     if auto_flush_bytes is None:
  __pyx_t_1 = (__pyx_v_auto_flush_bytes == Py_None);
  if (__pyx_t_1) {
/* … */
  }
 03161:         # The pooled path derives its byte threshold from the negotiated frame
 03162:         # cap. Give the generic parser an enabled placeholder so the byte
 03163:         # trigger alone still turns auto-flush on; the separate flag records
 03164:         # that this placeholder is dynamic rather than a literal threshold.
+03165:         auto_flush_bytes = 1
    __Pyx_INCREF(__pyx_mstate_global->__pyx_int_1);
    __Pyx_DECREF_SET(__pyx_v_auto_flush_bytes, __pyx_mstate_global->__pyx_int_1);
+03166:     if auto_flush_interval is None:
  __pyx_t_1 = (__pyx_v_auto_flush_interval == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+03167:         auto_flush_interval = 100
    __Pyx_INCREF(__pyx_mstate_global->__pyx_int_100);
    __Pyx_DECREF_SET(__pyx_v_auto_flush_interval, __pyx_mstate_global->__pyx_int_100);
+03168:     _parse_auto_flush(
  __pyx_t_2 = __pyx_f_7questdb_7_client__parse_auto_flush(__pyx_v_protocol, __pyx_v_auto_flush, __pyx_v_auto_flush_rows, __pyx_v_auto_flush_bytes, __pyx_v_auto_flush_interval, __pyx_v_c_auto_flush, 0); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 3168, __pyx_L1_error)
 03169:         protocol,
 03170:         auto_flush,
 03171:         auto_flush_rows,
 03172:         auto_flush_bytes,
 03173:         auto_flush_interval,
 03174:         c_auto_flush,
 03175:         0)
+03176:     c_auto_flush_bytes_dynamic[0] = default_auto_flush_bytes
  (__pyx_v_c_auto_flush_bytes_dynamic[0]) = __pyx_v_default_auto_flush_bytes;
 03177: 
 03178: 
 03179: # The frame cap a QuestDB server advertises with its default settings:
 03180: # 2 MiB less 14 bytes.
+03181: cdef size_t _QWP_DEFAULT_SERVER_FRAME_CAP = 2 * 1024 * 1024 - 14
  __pyx_v_7questdb_7_client__QWP_DEFAULT_SERVER_FRAME_CAP = 0x1ffff2;
 03182: 
 03183: 
+03184: cdef inline size_t _qwp_row_planning_cap(
static CYTHON_INLINE size_t __pyx_f_7questdb_7_client__qwp_row_planning_cap(size_t __pyx_v_hard_cap, int __pyx_v_server_cap_known) {
  size_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 03185:         size_t hard_cap, bint server_cap_known) noexcept:
 03186:     """
 03187:     The frame cap a QWP/WebSocket row buffer plans its frames for.
 03188: 
 03189:     Until the server advertises its cap, `hard_cap` is only the local
 03190:     limit, and rows buffered up to it would not fit a server running the
 03191:     default cap once that cap is known. So the buffer plans for the default
 03192:     cap until then, or for the local limit if that is lower. Only planning
 03193:     uses it: a publish refuses a frame by the local limit alone.
 03194:     """
+03195:     if not server_cap_known and hard_cap > _QWP_DEFAULT_SERVER_FRAME_CAP:
  __pyx_t_2 = (!__pyx_v_server_cap_known);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_hard_cap > __pyx_v_7questdb_7_client__QWP_DEFAULT_SERVER_FRAME_CAP);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+03196:         return _QWP_DEFAULT_SERVER_FRAME_CAP
    __pyx_r = __pyx_v_7questdb_7_client__QWP_DEFAULT_SERVER_FRAME_CAP;
    goto __pyx_L0;
+03197:     return hard_cap
  __pyx_r = __pyx_v_hard_cap;
  goto __pyx_L0;
 03198: 
 03199: 
+03200: cdef size_t _qwp_row_byte_limit(
static size_t __pyx_f_7questdb_7_client__qwp_row_byte_limit(struct __pyx_t_7questdb_7_client_auto_flush_mode_t const *__pyx_v_mode, int __pyx_v_bytes_dynamic, size_t __pyx_v_hard_cap) {
  size_t __pyx_v_soft_cap;
  size_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 03201:         const auto_flush_mode_t* mode,
 03202:         bint bytes_dynamic,
 03203:         size_t hard_cap) noexcept:
 03204:     """
 03205:     The `auto_flush_bytes` threshold of a QWP/WebSocket row buffer whose
 03206:     byte trigger is on, for the frame cap `hard_cap` it plans for.
 03207: 
 03208:     A threshold derived from the frame cap is 90% of it. An explicit
 03209:     threshold above 90% of the cap is lowered to it.
 03210:     """
 03211:     # floor(hard_cap * 0.9) without overflowing size_t.
 03212:     cdef size_t soft_cap = ((hard_cap // 10) * 9
+03213:                             + ((hard_cap % 10) * 9) // 10)
  __pyx_v_soft_cap = (((__pyx_v_hard_cap / 10) * 9) + (((__pyx_v_hard_cap % 10) * 9) / 10));
+03214:     if bytes_dynamic:
  if (__pyx_v_bytes_dynamic) {
/* … */
  }
+03215:         return soft_cap
    __pyx_r = __pyx_v_soft_cap;
    goto __pyx_L0;
+03216:     if soft_cap < <size_t>mode.byte_count:
  __pyx_t_1 = (__pyx_v_soft_cap < ((size_t)__pyx_v_mode->byte_count));
  if (__pyx_t_1) {
/* … */
  }
+03217:         return soft_cap
    __pyx_r = __pyx_v_soft_cap;
    goto __pyx_L0;
+03218:     return <size_t>mode.byte_count
  __pyx_r = ((size_t)__pyx_v_mode->byte_count);
  goto __pyx_L0;
 03219: 
 03220: 
+03221: cdef bint _qwp_row_should_auto_flush(
static int __pyx_f_7questdb_7_client__qwp_row_should_auto_flush(struct __pyx_t_7questdb_7_client_auto_flush_mode_t const *__pyx_v_mode, int __pyx_v_bytes_dynamic, struct line_sender_buffer *__pyx_v_buf, size_t __pyx_v_hard_cap, int64_t __pyx_v_interval_start_ms) {
  size_t __pyx_v_buffer_size;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 03222:         const auto_flush_mode_t* mode,
 03223:         bint bytes_dynamic,
 03224:         line_sender_buffer* buf,
 03225:         size_t hard_cap,
 03226:         int64_t interval_start_ms) noexcept:
 03227:     """
 03228:     Whether a QWP/WebSocket row buffer is due for auto-flush.
 03229: 
 03230:     Besides the configured row, byte and interval triggers, a buffer whose
 03231:     size estimate reaches the full frame cap is always due: it may not fit
 03232:     in one frame, and publishing now lets the rows before the newest one go
 03233:     out on their own. `auto_flush_bytes=off` therefore turns off only the
 03234:     configured byte trigger.
 03235:     """
 03236:     cdef size_t buffer_size
+03237:     if not mode.enabled:
  __pyx_t_1 = (!(__pyx_v_mode->enabled != 0));
  if (__pyx_t_1) {
/* … */
  }
+03238:         return False
    __pyx_r = 0;
    goto __pyx_L0;
+03239:     if (mode.row_count != -1 and
  __pyx_t_2 = (__pyx_v_mode->row_count != -1L);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L5_bool_binop_done;
  }
/* … */
  if (__pyx_t_1) {
/* … */
  }
+03240:             line_sender_buffer_row_count(buf) >= <size_t>mode.row_count):
  __pyx_t_2 = (line_sender_buffer_row_count(__pyx_v_buf) >= ((size_t)__pyx_v_mode->row_count));
  __pyx_t_1 = __pyx_t_2;
  __pyx_L5_bool_binop_done:;
+03241:         return True
    __pyx_r = 1;
    goto __pyx_L0;
+03242:     buffer_size = line_sender_buffer_size(buf)
  __pyx_v_buffer_size = line_sender_buffer_size(__pyx_v_buf);
+03243:     if buffer_size >= hard_cap:
  __pyx_t_1 = (__pyx_v_buffer_size >= __pyx_v_hard_cap);
  if (__pyx_t_1) {
/* … */
  }
+03244:         return True
    __pyx_r = 1;
    goto __pyx_L0;
+03245:     if (mode.byte_count != -1 and
  __pyx_t_2 = (__pyx_v_mode->byte_count != -1L);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L9_bool_binop_done;
  }
/* … */
  if (__pyx_t_1) {
/* … */
  }
+03246:             buffer_size >= _qwp_row_byte_limit(
  __pyx_t_2 = (__pyx_v_buffer_size >= __pyx_f_7questdb_7_client__qwp_row_byte_limit(__pyx_v_mode, __pyx_v_bytes_dynamic, __pyx_v_hard_cap));
  __pyx_t_1 = __pyx_t_2;
  __pyx_L9_bool_binop_done:;
 03247:                 mode, bytes_dynamic, hard_cap)):
+03248:         return True
    __pyx_r = 1;
    goto __pyx_L0;
+03249:     if (mode.interval != -1 and
  __pyx_t_2 = (__pyx_v_mode->interval != -1L);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L12_bool_binop_done;
  }
/* … */
  if (__pyx_t_1) {
/* … */
  }
 03250:             ((line_sender_now_micros() // 1000) - interval_start_ms)
+03251:             >= mode.interval):
  __pyx_t_2 = ((__Pyx_div_int64_t(line_sender_now_micros(), 0x3E8, 1) - __pyx_v_interval_start_ms) >= __pyx_v_mode->interval);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L12_bool_binop_done:;
+03252:         return True
    __pyx_r = 1;
    goto __pyx_L0;
+03253:     return False
  __pyx_r = 0;
  goto __pyx_L0;
 03254: 
 03255: 
+03256: class TaggedEnum(Enum):
  __Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_Enum); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __pyx_t_16 = PyTuple_Pack(1, __pyx_t_25); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __pyx_t_25 = __Pyx_PEP560_update_bases(__pyx_t_16); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __pyx_t_4 = __Pyx_CalculateMetaclass(NULL, __pyx_t_25); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_20 = __Pyx_Py3MetaclassPrepare(__pyx_t_4, __pyx_t_25, __pyx_mstate_global->__pyx_n_u_TaggedEnum, __pyx_mstate_global->__pyx_n_u_TaggedEnum, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_Base_class_for_tagged_enums); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  if (__pyx_t_25 != __pyx_t_16) {
    if (unlikely((PyDict_SetItemString(__pyx_t_20, "__orig_bases__", __pyx_t_16) < 0))) __PYX_ERR(0, 3256, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
/* … */
  __pyx_t_18 = __Pyx_Py3ClassCreate(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_TaggedEnum, __pyx_t_25, __pyx_t_20, NULL, 0, 0); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3256, __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_TaggedEnum, __pyx_t_18) < (0)) __PYX_ERR(0, 3256, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 03257:     """
 03258:     Base class for tagged enums.
 03259:     """
 03260: 
+03261:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_10TaggedEnum_1tag(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_10TaggedEnum_tag, "\n        Short name.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_10TaggedEnum_1tag = {"tag", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_10TaggedEnum_1tag, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_10TaggedEnum_tag};
static PyObject *__pyx_pw_7questdb_7_client_10TaggedEnum_1tag(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("tag (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(0, 3261, __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(0, 3261, __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, "tag", 0) < (0)) __PYX_ERR(0, 3261, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("tag", 1, 1, 1, i); __PYX_ERR(0, 3261, __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(0, 3261, __pyx_L3_error)
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("tag", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3261, __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.TaggedEnum.tag", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_10TaggedEnum_tag(__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_10TaggedEnum_tag(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.TaggedEnum.tag", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = NULL;
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_10TaggedEnum_1tag, 0, __pyx_mstate_global->__pyx_n_u_TaggedEnum_tag, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[194])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3261, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_18, __pyx_t_17};
    __pyx_t_16 = __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_18); __pyx_t_18 = 0;
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
    if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3261, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
  }
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_tag, __pyx_t_16) < (0)) __PYX_ERR(0, 3261, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 03262:     def tag(self):
 03263:         """
 03264:         Short name.
 03265:         """
+03266:         return self.value[0]
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3266, __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;
 03267: 
+03268:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_10TaggedEnum_3c_value(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_10TaggedEnum_3c_value = {"c_value", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_10TaggedEnum_3c_value, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_10TaggedEnum_3c_value(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("c_value (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(0, 3268, __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(0, 3268, __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, "c_value", 0) < (0)) __PYX_ERR(0, 3268, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("c_value", 1, 1, 1, i); __PYX_ERR(0, 3268, __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(0, 3268, __pyx_L3_error)
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("c_value", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3268, __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.TaggedEnum.c_value", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_10TaggedEnum_2c_value(__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_10TaggedEnum_2c_value(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.TaggedEnum.c_value", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = NULL;
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_10TaggedEnum_3c_value, 0, __pyx_mstate_global->__pyx_n_u_TaggedEnum_c_value, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[195])); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_17, __pyx_t_18};
    __pyx_t_16 = __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_17); __pyx_t_17 = 0;
    __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
    if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3268, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
  }
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_c_value, __pyx_t_16) < (0)) __PYX_ERR(0, 3268, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 03269:     def c_value(self):
+03270:         return self.value[1]
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3270, __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;
 03271: 
+03272:     @classmethod
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_10TaggedEnum_5parse(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_10TaggedEnum_4parse, "\n        Parse from the tag name.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_10TaggedEnum_5parse = {"parse", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_10TaggedEnum_5parse, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_10TaggedEnum_4parse};
static PyObject *__pyx_pw_7questdb_7_client_10TaggedEnum_5parse(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_cls = 0;
  PyObject *__pyx_v_tag = 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("parse (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_cls,&__pyx_mstate_global->__pyx_n_u_tag,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(0, 3272, __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(0, 3272, __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(0, 3272, __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, "parse", 0) < (0)) __PYX_ERR(0, 3272, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("parse", 1, 2, 2, i); __PYX_ERR(0, 3272, __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(0, 3272, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 3272, __pyx_L3_error)
    }
    __pyx_v_cls = values[0];
    __pyx_v_tag = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("parse", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 3272, __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.TaggedEnum.parse", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_10TaggedEnum_4parse(__pyx_self, __pyx_v_cls, __pyx_v_tag);
  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_10TaggedEnum_4parse(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_cls, PyObject *__pyx_v_tag) {
  PyObject *__pyx_v_entry = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("questdb._client.TaggedEnum.parse", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_entry);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_16 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_10TaggedEnum_5parse, __Pyx_CYFUNCTION_CLASSMETHOD, __pyx_mstate_global->__pyx_n_u_TaggedEnum_parse, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[196])); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_16);
  #endif
  __pyx_t_18 = __Pyx_Method_ClassMethod(__pyx_t_16); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_parse, __pyx_t_18) < (0)) __PYX_ERR(0, 3272, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 03273:     def parse(cls, tag):
 03274:         """
 03275:         Parse from the tag name.
 03276:         """
+03277:         if tag is None:
  __pyx_t_1 = (__pyx_v_tag == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+03278:             return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+03279:         elif isinstance(tag, cls):
  __pyx_t_1 = PyObject_IsInstance(__pyx_v_tag, __pyx_v_cls); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 3279, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+03280:             return tag
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_tag);
    __pyx_r = __pyx_v_tag;
    goto __pyx_L0;
+03281:         elif isinstance(tag, str):
  __pyx_t_1 = PyUnicode_Check(__pyx_v_tag); 
  if (likely(__pyx_t_1)) {
/* … */
  }
+03282:             for entry in cls:
    if (likely(PyList_CheckExact(__pyx_v_cls)) || PyTuple_CheckExact(__pyx_v_cls)) {
      __pyx_t_2 = __pyx_v_cls; __Pyx_INCREF(__pyx_t_2);
      __pyx_t_3 = 0;
      __pyx_t_4 = NULL;
    } else {
      __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_cls); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3282, __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(0, 3282, __pyx_L1_error)
    }
    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(0, 3282, __pyx_L1_error)
            #endif
            if (__pyx_t_3 >= __pyx_temp) break;
          }
          __pyx_t_5 = __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(0, 3282, __pyx_L1_error)
            #endif
            if (__pyx_t_3 >= __pyx_temp) break;
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3));
          #else
          __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_3);
          #endif
          ++__pyx_t_3;
        }
        if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3282, __pyx_L1_error)
      } else {
        __pyx_t_5 = __pyx_t_4(__pyx_t_2);
        if (unlikely(!__pyx_t_5)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 3282, __pyx_L1_error)
            PyErr_Clear();
          }
          break;
        }
      }
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_XDECREF_SET(__pyx_v_entry, __pyx_t_5);
      __pyx_t_5 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+03283:                 if entry.tag == tag:
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_entry, __pyx_mstate_global->__pyx_n_u_tag); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3283, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = PyObject_RichCompare(__pyx_t_5, __pyx_v_tag, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3283, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3283, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (__pyx_t_1) {
/* … */
      }
+03284:                     return entry
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_v_entry);
        __pyx_r = __pyx_v_entry;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        goto __pyx_L0;
+03285:             raise ValueError(f'Invalid value for {cls.__name__}: {tag!r}')
    __pyx_t_6 = NULL;
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_cls, __pyx_mstate_global->__pyx_n_u_name_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3285, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_t_5, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3285, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_tag), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3285, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_Invalid_value_for;
    __pyx_t_8[1] = __pyx_t_7;
    __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u_;
    __pyx_t_8[3] = __pyx_t_5;
    __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_8, 4, 18 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5));
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3285, __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;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_9};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_10, (2-__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;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3285, __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(0, 3285, __pyx_L1_error)
 03286:         else:
+03287:             raise ValueError(f'Invalid value for {cls.__name__}: {tag!r}')
  /*else*/ {
    __pyx_t_9 = NULL;
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_cls, __pyx_mstate_global->__pyx_n_u_name_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3287, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_t_6, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3287, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_tag), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3287, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_Invalid_value_for;
    __pyx_t_8[1] = __pyx_t_5;
    __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u_;
    __pyx_t_8[3] = __pyx_t_6;
    __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_8, 4, 18 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6));
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3287, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_10 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_7};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__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_2)) __PYX_ERR(0, 3287, __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(0, 3287, __pyx_L1_error)
  }
 03288: 
 03289: 
+03290: class Protocol(TaggedEnum):
  __Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_TaggedEnum); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3290, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __pyx_t_4 = PyTuple_Pack(1, __pyx_t_25); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3290, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __pyx_t_25 = __Pyx_PEP560_update_bases(__pyx_t_4); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3290, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __pyx_t_20 = __Pyx_CalculateMetaclass(NULL, __pyx_t_25); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3290, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __pyx_t_18 = __Pyx_Py3MetaclassPrepare(__pyx_t_20, __pyx_t_25, __pyx_mstate_global->__pyx_n_u_Protocol, __pyx_mstate_global->__pyx_n_u_Protocol, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_Protocol_to_use_for_sending_dat); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3290, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__pyx_t_25 != __pyx_t_4) {
    if (unlikely((PyDict_SetItemString(__pyx_t_18, "__orig_bases__", __pyx_t_4) < 0))) __PYX_ERR(0, 3290, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
  __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_Protocol, __pyx_t_25, __pyx_t_18, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3290, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_Protocol, __pyx_t_4) < (0)) __PYX_ERR(0, 3290, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 03291:     """
 03292:     Protocol to use for sending data to QuestDB.
 03293: 
 03294:     See :ref:`sender_which_protocol` for more information.
 03295:     """
+03296:     Tcp = ('tcp', 0)
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_Tcp, __pyx_mstate_global->__pyx_tuple[35]) < (0)) __PYX_ERR(0, 3296, __pyx_L1_error)
/* … */
  __pyx_mstate_global->__pyx_tuple[35] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_tcp, __pyx_mstate_global->__pyx_int_0); if (unlikely(!__pyx_mstate_global->__pyx_tuple[35])) __PYX_ERR(0, 3296, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[35]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[35]);
+03297:     Tcps = ('tcps', 1)
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_Tcps, __pyx_mstate_global->__pyx_tuple[36]) < (0)) __PYX_ERR(0, 3297, __pyx_L1_error)
/* … */
  __pyx_mstate_global->__pyx_tuple[36] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_tcps, __pyx_mstate_global->__pyx_int_1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[36])) __PYX_ERR(0, 3297, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[36]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[36]);
+03298:     Http = ('http', 2)
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_Http, __pyx_mstate_global->__pyx_tuple[37]) < (0)) __PYX_ERR(0, 3298, __pyx_L1_error)
/* … */
  __pyx_mstate_global->__pyx_tuple[37] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_http, __pyx_mstate_global->__pyx_int_2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[37])) __PYX_ERR(0, 3298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[37]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[37]);
+03299:     Https = ('https', 3)
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_Https, __pyx_mstate_global->__pyx_tuple[38]) < (0)) __PYX_ERR(0, 3299, __pyx_L1_error)
/* … */
  __pyx_mstate_global->__pyx_tuple[38] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_https, __pyx_mstate_global->__pyx_int_3); if (unlikely(!__pyx_mstate_global->__pyx_tuple[38])) __PYX_ERR(0, 3299, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[38]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[38]);
+03300:     Udp = ('udp', 4)
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_Udp, __pyx_mstate_global->__pyx_tuple[39]) < (0)) __PYX_ERR(0, 3300, __pyx_L1_error)
/* … */
  __pyx_mstate_global->__pyx_tuple[39] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_udp, __pyx_mstate_global->__pyx_int_4); if (unlikely(!__pyx_mstate_global->__pyx_tuple[39])) __PYX_ERR(0, 3300, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[39]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[39]);
+03301:     Ws = ('ws', 5)
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_Ws, __pyx_mstate_global->__pyx_tuple[40]) < (0)) __PYX_ERR(0, 3301, __pyx_L1_error)
/* … */
  __pyx_mstate_global->__pyx_tuple[40] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_ws, __pyx_mstate_global->__pyx_int_5); if (unlikely(!__pyx_mstate_global->__pyx_tuple[40])) __PYX_ERR(0, 3301, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[40]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[40]);
+03302:     Wss = ('wss', 6)
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_Wss, __pyx_mstate_global->__pyx_tuple[41]) < (0)) __PYX_ERR(0, 3302, __pyx_L1_error)
/* … */
  __pyx_mstate_global->__pyx_tuple[41] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_wss, __pyx_mstate_global->__pyx_int_6); if (unlikely(!__pyx_mstate_global->__pyx_tuple[41])) __PYX_ERR(0, 3302, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[41]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[41]);
 03303: 
+03304:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_8Protocol_1tls_enabled(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_8Protocol_1tls_enabled = {"tls_enabled", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_8Protocol_1tls_enabled, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_8Protocol_1tls_enabled(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("tls_enabled (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(0, 3304, __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(0, 3304, __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, "tls_enabled", 0) < (0)) __PYX_ERR(0, 3304, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("tls_enabled", 1, 1, 1, i); __PYX_ERR(0, 3304, __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(0, 3304, __pyx_L3_error)
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("tls_enabled", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3304, __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.Protocol.tls_enabled", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_8Protocol_tls_enabled(__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_8Protocol_tls_enabled(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_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client.Protocol.tls_enabled", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_16 = NULL;
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_8Protocol_1tls_enabled, 0, __pyx_mstate_global->__pyx_n_u_Protocol_tls_enabled, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[197])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3304, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_16, __pyx_t_17};
    __pyx_t_4 = __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_16); __pyx_t_16 = 0;
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3304, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_tls_enabled, __pyx_t_4) < (0)) __PYX_ERR(0, 3304, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 03305:     def tls_enabled(self):
+03306:         return self in (Protocol.Tcps, Protocol.Https, Protocol.Wss)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self);
  __pyx_t_1 = __pyx_v_self;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Protocol); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Tcps); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3306, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 3306, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!__pyx_t_5) {
  } else {
    __pyx_t_2 = __pyx_t_5;
    goto __pyx_L3_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Protocol); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Https); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3306, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 3306, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!__pyx_t_5) {
  } else {
    __pyx_t_2 = __pyx_t_5;
    goto __pyx_L3_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Protocol); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Wss); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3306, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 3306, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_2 = __pyx_t_5;
  __pyx_L3_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 03307: 
 03308: 
+03309: class QwpWsProgress(TaggedEnum):
  __Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_TaggedEnum); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3309, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __pyx_t_20 = PyTuple_Pack(1, __pyx_t_25); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3309, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __pyx_t_25 = __Pyx_PEP560_update_bases(__pyx_t_20); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3309, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __pyx_t_18 = __Pyx_CalculateMetaclass(NULL, __pyx_t_25); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3309, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_18, __pyx_t_25, __pyx_mstate_global->__pyx_n_u_QwpWsProgress, __pyx_mstate_global->__pyx_n_u_QwpWsProgress, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_Progress_mode_for_QWP_WebSocket); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3309, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__pyx_t_25 != __pyx_t_20) {
    if (unlikely((PyDict_SetItemString(__pyx_t_4, "__orig_bases__", __pyx_t_20) < 0))) __PYX_ERR(0, 3309, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
/* … */
  __pyx_t_20 = __Pyx_Py3ClassCreate(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_QwpWsProgress, __pyx_t_25, __pyx_t_4, NULL, 0, 0); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3309, __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 (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_QwpWsProgress, __pyx_t_20) < (0)) __PYX_ERR(0, 3309, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 03310:     """
 03311:     Progress mode for QWP/WebSocket senders.
 03312:     """
+03313:     Background = ('background', LINE_SENDER_QWPWS_PROGRESS_BACKGROUND)
  __pyx_t_20 = __Pyx_PyLong_From_enum__line_sender_qwpws_progress(LINE_SENDER_QWPWS_PROGRESS_BACKGROUND); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3313, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __pyx_t_17 = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_background, __pyx_t_20); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3313, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_Background, __pyx_t_17) < (0)) __PYX_ERR(0, 3313, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+03314:     Manual = ('manual', LINE_SENDER_QWPWS_PROGRESS_MANUAL)
  __pyx_t_17 = __Pyx_PyLong_From_enum__line_sender_qwpws_progress(LINE_SENDER_QWPWS_PROGRESS_MANUAL); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3314, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_20 = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_manual, __pyx_t_17); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3314, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_Manual, __pyx_t_20) < (0)) __PYX_ERR(0, 3314, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
 03315: 
 03316: 
+03317: class SenderErrorCategory(TaggedEnum):
  __Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_TaggedEnum); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3317, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __pyx_t_18 = PyTuple_Pack(1, __pyx_t_25); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3317, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __pyx_t_25 = __Pyx_PEP560_update_bases(__pyx_t_18); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3317, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __pyx_t_4 = __Pyx_CalculateMetaclass(NULL, __pyx_t_25); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3317, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_20 = __Pyx_Py3MetaclassPrepare(__pyx_t_4, __pyx_t_25, __pyx_mstate_global->__pyx_n_u_SenderErrorCategory, __pyx_mstate_global->__pyx_n_u_SenderErrorCategory, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_Category_of_a_structured_QWP_We); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3317, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  if (__pyx_t_25 != __pyx_t_18) {
    if (unlikely((PyDict_SetItemString(__pyx_t_20, "__orig_bases__", __pyx_t_18) < 0))) __PYX_ERR(0, 3317, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
/* … */
  __pyx_t_18 = __Pyx_Py3ClassCreate(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_SenderErrorCategory, __pyx_t_25, __pyx_t_20, NULL, 0, 0); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3317, __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_SenderErrorCategory, __pyx_t_18) < (0)) __PYX_ERR(0, 3317, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 03318:     """
 03319:     Category of a structured QWP/WebSocket diagnostic.
 03320:     """
 03321:     SchemaMismatch = (
+03322:         'schema_mismatch',
  __pyx_t_17 = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_schema_mismatch, __pyx_t_18); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_SchemaMismatch, __pyx_t_17) < (0)) __PYX_ERR(0, 3321, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+03323:         LINE_SENDER_QWPWS_ERROR_SCHEMA_MISMATCH)
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_category(LINE_SENDER_QWPWS_ERROR_SCHEMA_MISMATCH); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3323, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
+03324:     ParseError = ('parse_error', LINE_SENDER_QWPWS_ERROR_PARSE_ERROR)
  __pyx_t_17 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_category(LINE_SENDER_QWPWS_ERROR_PARSE_ERROR); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_18 = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_parse_error, __pyx_t_17); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ParseError, __pyx_t_18) < (0)) __PYX_ERR(0, 3324, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+03325:     InternalError = ('internal_error', LINE_SENDER_QWPWS_ERROR_INTERNAL_ERROR)
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_category(LINE_SENDER_QWPWS_ERROR_INTERNAL_ERROR); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3325, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_17 = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_internal_error, __pyx_t_18); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3325, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_InternalError, __pyx_t_17) < (0)) __PYX_ERR(0, 3325, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+03326:     SecurityError = ('security_error', LINE_SENDER_QWPWS_ERROR_SECURITY_ERROR)
  __pyx_t_17 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_category(LINE_SENDER_QWPWS_ERROR_SECURITY_ERROR); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3326, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_18 = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_security_error, __pyx_t_17); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3326, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_SecurityError, __pyx_t_18) < (0)) __PYX_ERR(0, 3326, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+03327:     WriteError = ('write_error', LINE_SENDER_QWPWS_ERROR_WRITE_ERROR)
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_category(LINE_SENDER_QWPWS_ERROR_WRITE_ERROR); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3327, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_17 = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_write_error, __pyx_t_18); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3327, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_WriteError, __pyx_t_17) < (0)) __PYX_ERR(0, 3327, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+03328:     NotWritable = ('not_writable', LINE_SENDER_QWPWS_ERROR_NOT_WRITABLE)
  __pyx_t_17 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_category(LINE_SENDER_QWPWS_ERROR_NOT_WRITABLE); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3328, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_18 = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_not_writable, __pyx_t_17); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3328, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_NotWritable, __pyx_t_18) < (0)) __PYX_ERR(0, 3328, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 03329:     ProtocolViolation = (
+03330:         'protocol_violation',
  __pyx_t_17 = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_protocol_violation, __pyx_t_18); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3330, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ProtocolViolation, __pyx_t_17) < (0)) __PYX_ERR(0, 3329, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+03331:         LINE_SENDER_QWPWS_ERROR_PROTOCOL_VIOLATION)
  __pyx_t_18 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_category(LINE_SENDER_QWPWS_ERROR_PROTOCOL_VIOLATION); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3331, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
+03332:     Unknown = ('unknown', LINE_SENDER_QWPWS_ERROR_UNKNOWN)
  __pyx_t_17 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_category(LINE_SENDER_QWPWS_ERROR_UNKNOWN); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3332, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_18 = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_unknown, __pyx_t_17); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3332, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_Unknown, __pyx_t_18) < (0)) __PYX_ERR(0, 3332, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 03333: 
 03334: 
+03335: class SenderErrorPolicy(TaggedEnum):
  __Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_TaggedEnum); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3335, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __pyx_t_4 = PyTuple_Pack(1, __pyx_t_25); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3335, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __pyx_t_25 = __Pyx_PEP560_update_bases(__pyx_t_4); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3335, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __pyx_t_20 = __Pyx_CalculateMetaclass(NULL, __pyx_t_25); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3335, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __pyx_t_18 = __Pyx_Py3MetaclassPrepare(__pyx_t_20, __pyx_t_25, __pyx_mstate_global->__pyx_n_u_SenderErrorPolicy, __pyx_mstate_global->__pyx_n_u_SenderErrorPolicy, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_Applied_policy_for_a_structured); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3335, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__pyx_t_25 != __pyx_t_4) {
    if (unlikely((PyDict_SetItemString(__pyx_t_18, "__orig_bases__", __pyx_t_4) < 0))) __PYX_ERR(0, 3335, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
  __pyx_t_17 = __Pyx_Py3ClassCreate(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_SenderErrorPolicy, __pyx_t_25, __pyx_t_18, NULL, 0, 0); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3335, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_SenderErrorPolicy, __pyx_t_17) < (0)) __PYX_ERR(0, 3335, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 03336:     """
 03337:     Applied policy for a structured QWP/WebSocket diagnostic.
 03338:     """
+03339:     Retriable = ('retriable', LINE_SENDER_QWPWS_ERROR_RETRIABLE)
  __pyx_t_4 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_policy(LINE_SENDER_QWPWS_ERROR_RETRIABLE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3339, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_17 = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_retriable, __pyx_t_4); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3339, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_Retriable, __pyx_t_17) < (0)) __PYX_ERR(0, 3339, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 03340:     RetriableOther = (
+03341:         'retriable_other',
  __pyx_t_4 = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_retriable_other, __pyx_t_17); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3341, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_RetriableOther, __pyx_t_4) < (0)) __PYX_ERR(0, 3340, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+03342:         LINE_SENDER_QWPWS_ERROR_RETRIABLE_OTHER)
  __pyx_t_17 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_policy(LINE_SENDER_QWPWS_ERROR_RETRIABLE_OTHER); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
+03343:     Terminal = ('terminal', LINE_SENDER_QWPWS_ERROR_TERMINAL)
  __pyx_t_4 = __Pyx_PyLong_From_enum__line_sender_qwpws_error_policy(LINE_SENDER_QWPWS_ERROR_TERMINAL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3343, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_17 = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_terminal, __pyx_t_4); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3343, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_Terminal, __pyx_t_17) < (0)) __PYX_ERR(0, 3343, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 03344: 
 03345: 
+03346: @dataclass(frozen=True)
  __pyx_t_18 = NULL;
  __pyx_t_4 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_dataclass); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3346, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_4, NULL};
    __pyx_t_19 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 3346, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_19);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_frozen, Py_True, __pyx_t_19, __pyx_callargs+1, 0) < (0)) __PYX_ERR(0, 3346, __pyx_L1_error)
    __pyx_t_17 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_16, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_19);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
    if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3346, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
  }
+03347: class SenderError:
  __pyx_t_25 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_mstate_global->__pyx_empty_tuple, __pyx_mstate_global->__pyx_n_u_SenderError, __pyx_mstate_global->__pyx_n_u_SenderError, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_Structured_QWP_WebSocket_server); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3347, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __pyx_t_20 = __Pyx_PyDict_NewPresized(7); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3347, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_category, __pyx_mstate_global->__pyx_n_u_SenderErrorCategory) < (0)) __PYX_ERR(0, 3347, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_applied_policy, __pyx_mstate_global->__pyx_n_u_SenderErrorPolicy) < (0)) __PYX_ERR(0, 3347, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_status, __pyx_mstate_global->__pyx_kp_u_Optional_int) < (0)) __PYX_ERR(0, 3347, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_message, __pyx_mstate_global->__pyx_n_u_str_2) < (0)) __PYX_ERR(0, 3347, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_message_sequence, __pyx_mstate_global->__pyx_kp_u_Optional_int) < (0)) __PYX_ERR(0, 3347, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_from_fsn, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 3347, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_to_fsn, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 3347, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_annotations, __pyx_t_20) < (0)) __PYX_ERR(0, 3347, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
/* … */
  __pyx_t_16 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_mstate_global->__pyx_n_u_SenderError, __pyx_mstate_global->__pyx_empty_tuple, __pyx_t_25, NULL, 0, 0); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3347, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_16);
  #endif
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_18, __pyx_t_16};
    __pyx_t_20 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_17, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
    if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3346, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_20);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_SenderError, __pyx_t_20) < (0)) __PYX_ERR(0, 3347, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 03348:     """Structured QWP/WebSocket server diagnostic."""
 03349:     category: SenderErrorCategory
 03350:     applied_policy: SenderErrorPolicy
 03351:     status: Optional[int]
 03352:     message: str
 03353:     message_sequence: Optional[int]
 03354:     from_fsn: int
 03355:     to_fsn: int
 03356: 
 03357: 
+03358: class ConnectionEventKind(TaggedEnum):
  __Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_TaggedEnum); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __pyx_t_20 = PyTuple_Pack(1, __pyx_t_25); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __pyx_t_25 = __Pyx_PEP560_update_bases(__pyx_t_20); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __pyx_t_17 = __Pyx_CalculateMetaclass(NULL, __pyx_t_25); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_16 = __Pyx_Py3MetaclassPrepare(__pyx_t_17, __pyx_t_25, __pyx_mstate_global->__pyx_n_u_ConnectionEventKind, __pyx_mstate_global->__pyx_n_u_ConnectionEventKind, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_Connection_state_transitions_ob); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  if (__pyx_t_25 != __pyx_t_20) {
    if (unlikely((PyDict_SetItemString(__pyx_t_16, "__orig_bases__", __pyx_t_20) < 0))) __PYX_ERR(0, 3358, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
/* … */
  __pyx_t_20 = __Pyx_Py3ClassCreate(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_ConnectionEventKind, __pyx_t_25, __pyx_t_16, NULL, 0, 0); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3358, __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 (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ConnectionEventKind, __pyx_t_20) < (0)) __PYX_ERR(0, 3358, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 03359:     """
 03360:     Connection-state transitions observed by the ingress connection pool.
 03361: 
 03362:     ``Connected``
 03363:         First successful connect of the pool's lifetime.
 03364: 
 03365:     ``Disconnected``
 03366:         An active wire connection died.
 03367: 
 03368:     ``Reconnected``
 03369:         Reconnect succeeded against the same endpoint after a failure.
 03370: 
 03371:     ``FailedOver``
 03372:         Reconnect succeeded against a different endpoint.
 03373: 
 03374:     ``EndpointAttemptFailed``
 03375:         One endpoint connect/upgrade attempt failed; the walk moves on.
 03376: 
 03377:     ``AllEndpointsUnreachable``
 03378:         Every configured endpoint was attempted and none accepted.
 03379: 
 03380:     ``AuthFailed``
 03381:         The server rejected the credential the client presented: HTTP 401
 03382:         or 403 on the WebSocket upgrade, once per connect attempt.
 03383:         :attr:`ConnectionEvent.host` and :attr:`ConnectionEvent.port` are
 03384:         always set.
 03385: 
 03386:         Before a sender's first connection it is terminal, and the owning
 03387:         sender/pool operation raises. Once connected, a sender keeps
 03388:         reconnecting with capped backoff and keeps its unacknowledged rows,
 03389:         reporting each rejected attempt with this event: an
 03390:         identity-platform outage makes a server reject a valid credential
 03391:         for a while. To give up instead, close the sender from your own
 03392:         code. See :ref:`token_rejections`.
 03393: 
 03394:         A 401 followed by failure to obtain a replacement token is instead
 03395:         ``CredentialUnavailable``, which preserves the rejected endpoint and
 03396:         retains the provider error's retry/stop classification.
 03397: 
 03398:     ``CredentialUnavailable``
 03399:         A token provider -- ``oidc_auth=`` or ``bearer_token_provider=`` --
 03400:         failed while acquiring a credential.
 03401: 
 03402:         Before the first dial, :attr:`ConnectionEvent.host` and
 03403:         :attr:`ConnectionEvent.port` are ``None``. If the provider fails when
 03404:         reacquiring a token after a server 401, they identify the endpoint
 03405:         that rejected the previous token; :attr:`ConnectionEvent.cause_msg`
 03406:         includes the 401. Read :attr:`ConnectionEvent.cause_code` to tell a
 03407:         retry from a stop:
 03408: 
 03409:         * ``SocketError`` — the ordinary case, and retryable. The sender
 03410:           keeps reconnecting so queued rows survive while the identity
 03411:           provider recovers or a human signs in, and nothing is raised to
 03412:           the caller. A foreground call such as :meth:`QuestDB.dataframe`
 03413:           raises instead, because a credential problem there is the
 03414:           caller's to see. With ``oidc_auth=`` it fails fast. With
 03415:           ``bearer_token_provider=`` it fails fast on a failure the
 03416:           provider classified permanent, but first retries a retryable one
 03417:           -- any exception other than a
 03418:           :class:`~questdb.auth.TokenUnavailableError` with
 03419:           ``retryable=False`` -- for up to
 03420:           ``reconnect_max_duration_millis``.
 03421:         * ``AuthError`` or ``ConfigError`` — the provider cannot recover in
 03422:           this process, so the reconnect is **terminal** and the sender
 03423:           stops. Reached by a permanently closed provider
 03424:           (:meth:`~questdb.auth.OidcDeviceAuth.close` is one-way; cancelling
 03425:           one :meth:`~questdb.auth.OidcDeviceAuth.sign_in` attempt does not
 03426:           close it), by a scope that cannot yield the required token kind,
 03427:           such as ``groups_in_token=True`` against an identity provider that
 03428:           returns no ID token, and by a ``bearer_token_provider=`` that
 03429:           raised its own plain :class:`QuestDBError` -- not a
 03430:           :class:`~questdb.auth.TokenUnavailableError` -- with ``code``
 03431:           ``InvalidApiCall`` (see
 03432:           :class:`~questdb.auth.BearerTokenProvider`), which reports
 03433:           ``ConfigError``, as a closed
 03434:           :class:`~questdb.auth.RefreshingTokenProvider` does when it is
 03435:           reached through an application provider: a subclass that
 03436:           overrides ``token()`` or ``on_rejected()``, or a provider of your
 03437:           own that calls its ``token()``. Queued rows are not
 03438:           deleted — a disk-backed store-and-forward slot stays drainable by
 03439:           a later process — but this process will not send them.
 03440: 
 03441:         A listener that pages on a permanent stop must therefore qualify on
 03442:         ``cause_code``, not on the kind alone.
 03443: 
 03444:         Counterpart of the Java client's
 03445:         ``QwpCredentialUnavailableException``, which is likewise distinct
 03446:         from its ``QwpAuthFailedException``.
 03447:     """
+03448:     Connected = ('connected', 0)
  if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_Connected, __pyx_mstate_global->__pyx_tuple[42]) < (0)) __PYX_ERR(0, 3448, __pyx_L1_error)
/* … */
  __pyx_mstate_global->__pyx_tuple[42] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_connected, __pyx_mstate_global->__pyx_int_0); if (unlikely(!__pyx_mstate_global->__pyx_tuple[42])) __PYX_ERR(0, 3448, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[42]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[42]);
+03449:     Disconnected = ('disconnected', 1)
  if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_Disconnected, __pyx_mstate_global->__pyx_tuple[43]) < (0)) __PYX_ERR(0, 3449, __pyx_L1_error)
/* … */
  __pyx_mstate_global->__pyx_tuple[43] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_disconnected, __pyx_mstate_global->__pyx_int_1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[43])) __PYX_ERR(0, 3449, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[43]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[43]);
+03450:     Reconnected = ('reconnected', 2)
  if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_Reconnected, __pyx_mstate_global->__pyx_tuple[44]) < (0)) __PYX_ERR(0, 3450, __pyx_L1_error)
/* … */
  __pyx_mstate_global->__pyx_tuple[44] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_reconnected, __pyx_mstate_global->__pyx_int_2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[44])) __PYX_ERR(0, 3450, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[44]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[44]);
+03451:     FailedOver = ('failed_over', 3)
  if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_FailedOver, __pyx_mstate_global->__pyx_tuple[45]) < (0)) __PYX_ERR(0, 3451, __pyx_L1_error)
/* … */
  __pyx_mstate_global->__pyx_tuple[45] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_failed_over, __pyx_mstate_global->__pyx_int_3); if (unlikely(!__pyx_mstate_global->__pyx_tuple[45])) __PYX_ERR(0, 3451, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[45]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[45]);
+03452:     EndpointAttemptFailed = ('endpoint_attempt_failed', 4)
  if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_EndpointAttemptFailed, __pyx_mstate_global->__pyx_tuple[46]) < (0)) __PYX_ERR(0, 3452, __pyx_L1_error)
/* … */
  __pyx_mstate_global->__pyx_tuple[46] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_endpoint_attempt_failed, __pyx_mstate_global->__pyx_int_4); if (unlikely(!__pyx_mstate_global->__pyx_tuple[46])) __PYX_ERR(0, 3452, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[46]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[46]);
+03453:     AllEndpointsUnreachable = ('all_endpoints_unreachable', 5)
  if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_AllEndpointsUnreachable, __pyx_mstate_global->__pyx_tuple[47]) < (0)) __PYX_ERR(0, 3453, __pyx_L1_error)
/* … */
  __pyx_mstate_global->__pyx_tuple[47] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_all_endpoints_unreachable, __pyx_mstate_global->__pyx_int_5); if (unlikely(!__pyx_mstate_global->__pyx_tuple[47])) __PYX_ERR(0, 3453, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[47]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[47]);
+03454:     AuthFailed = ('auth_failed', 6)
  if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_AuthFailed, __pyx_mstate_global->__pyx_tuple[48]) < (0)) __PYX_ERR(0, 3454, __pyx_L1_error)
/* … */
  __pyx_mstate_global->__pyx_tuple[48] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_auth_failed, __pyx_mstate_global->__pyx_int_6); if (unlikely(!__pyx_mstate_global->__pyx_tuple[48])) __PYX_ERR(0, 3454, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[48]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[48]);
+03455:     CredentialUnavailable = ('credential_unavailable', 7)
  if (__Pyx_SetNameInClass(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_CredentialUnavailable, __pyx_mstate_global->__pyx_tuple[49]) < (0)) __PYX_ERR(0, 3455, __pyx_L1_error)
/* … */
  __pyx_mstate_global->__pyx_tuple[49] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_credential_unavailable, __pyx_mstate_global->__pyx_int_7); if (unlikely(!__pyx_mstate_global->__pyx_tuple[49])) __PYX_ERR(0, 3455, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[49]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[49]);
 03456: 
 03457: 
+03458: @dataclass(frozen=True)
  __pyx_t_16 = NULL;
  __pyx_t_18 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_dataclass); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 3458, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_18, NULL};
    __pyx_t_4 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3458, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_frozen, Py_True, __pyx_t_4, __pyx_callargs+1, 0) < (0)) __PYX_ERR(0, 3458, __pyx_L1_error)
    __pyx_t_20 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_19, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_4);
    __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
    if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3458, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_20);
  }
+03459: class ConnectionEvent:
  __pyx_t_25 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_mstate_global->__pyx_empty_tuple, __pyx_mstate_global->__pyx_n_u_ConnectionEvent, __pyx_mstate_global->__pyx_n_u_ConnectionEvent, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_One_connection_state_transition); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3459, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __pyx_t_17 = __Pyx_PyDict_NewPresized(9); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3459, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_kind, __pyx_mstate_global->__pyx_n_u_ConnectionEventKind) < (0)) __PYX_ERR(0, 3459, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_host, __pyx_mstate_global->__pyx_kp_u_Optional_str) < (0)) __PYX_ERR(0, 3459, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_port, __pyx_mstate_global->__pyx_kp_u_Optional_str) < (0)) __PYX_ERR(0, 3459, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_previous_host, __pyx_mstate_global->__pyx_kp_u_Optional_str) < (0)) __PYX_ERR(0, 3459, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_previous_port, __pyx_mstate_global->__pyx_kp_u_Optional_str) < (0)) __PYX_ERR(0, 3459, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_attempt_number, __pyx_mstate_global->__pyx_kp_u_Optional_int) < (0)) __PYX_ERR(0, 3459, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_cause_code, __pyx_mstate_global->__pyx_kp_u_Optional_QuestDBErrorCode) < (0)) __PYX_ERR(0, 3459, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_cause_msg, __pyx_mstate_global->__pyx_kp_u_Optional_str) < (0)) __PYX_ERR(0, 3459, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_timestamp_millis, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 3459, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_annotations, __pyx_t_17) < (0)) __PYX_ERR(0, 3459, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
/* … */
  __pyx_t_19 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_mstate_global->__pyx_n_u_ConnectionEvent, __pyx_mstate_global->__pyx_empty_tuple, __pyx_t_25, NULL, 0, 0); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 3459, __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_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_16, __pyx_t_19};
    __pyx_t_17 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_20, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
    __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
    __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
    if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3458, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ConnectionEvent, __pyx_t_17) < (0)) __PYX_ERR(0, 3459, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 03460:     """
 03461:     One connection-state transition, delivered to the
 03462:     ``connection_listener`` registered via :meth:`QuestDB.from_conf`.
 03463: 
 03464:     Listeners run on a dedicated dispatcher thread — never on an I/O or
 03465:     caller thread — fed by a bounded inbox with a drop-oldest overflow
 03466:     policy, so a slow listener cannot stall ingest or reconnects.
 03467:     Successful events are queued only after negotiated connection state,
 03468:     including the server-advertised frame cap, is committed. They are not
 03469:     data-delivery or acknowledgement barriers.
 03470:     Exceptions raised by the listener are logged and swallowed.
 03471:     """
 03472:     kind: ConnectionEventKind
 03473:     host: Optional[str]
 03474:     port: Optional[str]
 03475:     #: For :attr:`ConnectionEventKind.FailedOver`, the previously-active
 03476:     #: endpoint.
 03477:     previous_host: Optional[str]
 03478:     previous_port: Optional[str]
 03479:     #: Monotonic connect-attempt counter at the time the event fired.
 03480:     attempt_number: Optional[int]
 03481:     cause_code: Optional[QuestDBErrorCode]
 03482:     cause_msg: Optional[str]
 03483:     #: Wall-clock time of the event, milliseconds since the Unix epoch.
 03484:     timestamp_millis: int
 03485: 
 03486: 
+03487: cdef inline object _conn_event_str(const char* buf, size_t buf_len):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client__conn_event_str(char const *__pyx_v_buf, size_t __pyx_v_buf_len) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client._conn_event_str", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+03488:     if buf == NULL:
  __pyx_t_1 = (__pyx_v_buf == NULL);
  if (__pyx_t_1) {
/* … */
  }
+03489:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+03490:     return PyUnicode_FromStringAndSize(buf, <Py_ssize_t>buf_len)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyUnicode_FromStringAndSize(__pyx_v_buf, ((Py_ssize_t)__pyx_v_buf_len)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3490, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 03491: 
 03492: 
+03493: cdef class _DispatchContext:
struct __pyx_obj_7questdb_7_client__DispatchContext {
  PyObject_HEAD
  PyObject *owner_token;
  PyObject *error_handler;
  PyObject *connection_listener;
};

 03494:     """Python callback targets and the exact owner they dispatch for.
 03495: 
 03496:     Native callback registrations borrow a pointer to this object. Its owner
 03497:     field is deliberately an opaque token rather than the owning handle, so
 03498:     the context does not create an owner/context cycle by itself.
 03499:     """
 03500:     cdef object owner_token
 03501:     cdef object error_handler
 03502:     cdef object connection_listener
 03503: 
 03504: 
+03505: cdef _DispatchContext _new_dispatch_context(
static struct __pyx_obj_7questdb_7_client__DispatchContext *__pyx_f_7questdb_7_client__new_dispatch_context(PyObject *__pyx_v_owner_token, PyObject *__pyx_v_error_handler, PyObject *__pyx_v_listener) {
  struct __pyx_obj_7questdb_7_client__DispatchContext *__pyx_v_context = 0;
  struct __pyx_obj_7questdb_7_client__DispatchContext *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client._new_dispatch_context", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_context);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 03506:         object owner_token, object error_handler, object listener):
+03507:     cdef _DispatchContext context = _DispatchContext()
  __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__DispatchContext, __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(0, 3507, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_1);
  }
  __pyx_v_context = ((struct __pyx_obj_7questdb_7_client__DispatchContext *)__pyx_t_1);
  __pyx_t_1 = 0;
+03508:     context.owner_token = owner_token
  __Pyx_INCREF(__pyx_v_owner_token);
  __Pyx_GIVEREF(__pyx_v_owner_token);
  __Pyx_GOTREF(__pyx_v_context->owner_token);
  __Pyx_DECREF(__pyx_v_context->owner_token);
  __pyx_v_context->owner_token = __pyx_v_owner_token;
+03509:     context.error_handler = error_handler
  __Pyx_INCREF(__pyx_v_error_handler);
  __Pyx_GIVEREF(__pyx_v_error_handler);
  __Pyx_GOTREF(__pyx_v_context->error_handler);
  __Pyx_DECREF(__pyx_v_context->error_handler);
  __pyx_v_context->error_handler = __pyx_v_error_handler;
+03510:     context.connection_listener = listener
  __Pyx_INCREF(__pyx_v_listener);
  __Pyx_GIVEREF(__pyx_v_listener);
  __Pyx_GOTREF(__pyx_v_context->connection_listener);
  __Pyx_DECREF(__pyx_v_context->connection_listener);
  __pyx_v_context->connection_listener = __pyx_v_listener;
+03511:     return context
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_context);
  __pyx_r = __pyx_v_context;
  goto __pyx_L0;
 03512: 
 03513: 
 03514: # Module-level strong root for callback contexts registered with the native
 03515: # dispatchers. It keeps the exact object passed as native `void* user_data`
 03516: # reachable from a GC root for as long as its dispatchers can still fire, so
 03517: # the cycle collector never clears a live callback's internals (which would
 03518: # crash the interpreter when a dispatch calls it). A handle abandoned in a
 03519: # reference cycle through its own callback therefore leaks rather than
 03520: # crashing; explicit close() removes the entry once the dispatchers are joined
 03521: # and lets the cycle collect.
+03522: _LIVE_CALLBACK_REFS = {}
  __pyx_t_25 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3522, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_LIVE_CALLBACK_REFS, __pyx_t_25) < (0)) __PYX_ERR(0, 3522, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 03523: 
 03524: 
 03525: # The registry is keyed by a value captured while the owner is alive and
 03526: # released through that key alone: `tp_dealloc` must never pass the dying
 03527: # owner back into Python-level calls (PyPy's cpyext aborts on reviving a
 03528: # dying object mid-dealloc).
+03529: cdef size_t _retain_callback_refs(object owner, object context):
static size_t __pyx_f_7questdb_7_client__retain_callback_refs(PyObject *__pyx_v_owner, PyObject *__pyx_v_context) {
  size_t __pyx_v_key;
  size_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client._retain_callback_refs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1L;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+03530:     cdef size_t key = id(owner)
  __pyx_t_2 = NULL;
  __pyx_t_3 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_owner};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_id, __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(0, 3530, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_3 = __Pyx_PyLong_As_size_t(__pyx_t_1); if (unlikely((__pyx_t_3 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 3530, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_key = __pyx_t_3;
+03531:     _LIVE_CALLBACK_REFS[key] = context
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_LIVE_CALLBACK_REFS); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3531, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (unlikely((__Pyx_SetItemInt(__pyx_t_1, __pyx_v_key, __pyx_v_context, size_t, 0, __Pyx_PyLong_FromSize_t, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference) < 0))) __PYX_ERR(0, 3531, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+03532:     return key
  __pyx_r = __pyx_v_key;
  goto __pyx_L0;
 03533: 
 03534: 
+03535: cdef _release_callback_refs(size_t key):
static PyObject *__pyx_f_7questdb_7_client__release_callback_refs(size_t __pyx_v_key) {
  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_5);
  __Pyx_AddTraceback("questdb._client._release_callback_refs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+03536:     if key != 0:
  __pyx_t_1 = (__pyx_v_key != 0);
  if (__pyx_t_1) {
/* … */
  }
+03537:         _LIVE_CALLBACK_REFS.pop(key, None)
    __pyx_t_3 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_LIVE_CALLBACK_REFS); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3537, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_pop); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3537, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyLong_FromSize_t(__pyx_v_key); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3537, __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_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_6 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_4, Py_None};
      __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_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(0, 3537, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 03538: 
 03539: 
 03540: # Scoped call depths and callback-dispatch depths live in native
 03541: # thread-local storage, keyed by owner token identity, because `row()`
 03542: # raises and lowers a scoped depth on every pooled row and checks the
 03543: # dispatch depth on every standalone ws row: the
 03544: # whole table is reached through a single `PyThread_tss_get`, and the
 03545: # per-owner entry through a scan of the handful of owners a thread has
 03546: # calls or dispatches in progress on. The key is process-wide -- OS TLS
 03547: # keys are a capped process resource, so one per handle exhausts them --
 03548: # and holds a table per thread rather than a single count, so each count
 03549: # belongs to one owner. While no callback is being dispatched anywhere,
 03550: # `_dispatching_for` answers from `_DISPATCHES_IN_PROGRESS` without reaching
 03551: # the table at all.
 03552: cdef Py_tss_t _SCOPED_DEPTH_KEY
 03553: 
+03554: if PyThread_tss_create(&_SCOPED_DEPTH_KEY) != 0:
  __pyx_t_8 = (PyThread_tss_create((&__pyx_v_7questdb_7_client__SCOPED_DEPTH_KEY)) != 0);
  if (unlikely(__pyx_t_8)) {
/* … */
  }
+03555:     raise RuntimeError('Could not create the QuestDB thread-state key.')
    __pyx_t_17 = NULL;
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_17, __pyx_mstate_global->__pyx_kp_u_Could_not_create_the_QuestDB_thr};
      __pyx_t_25 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
      if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3555, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_25);
    }
    __Pyx_Raise(__pyx_t_25, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
    __PYX_ERR(0, 3555, __pyx_L1_error)
 03556: 
+03557: cdef enum:
enum  {
  __pyx_e_7questdb_7_client__SCOPED_TABLE_INIT_SLOTS = 4
};
 03558:     _SCOPED_TABLE_INIT_SLOTS = 4
 03559: 
 03560: # Callback dispatches in progress on every thread together. Changed only with
 03561: # the GIL held, by `_enter_dispatch` and `_exit_dispatch`. A count left raised
 03562: # by a failed exit only costs the lookup it saves.
+03563: cdef size_t _DISPATCHES_IN_PROGRESS = 0
  __pyx_v_7questdb_7_client__DISPATCHES_IN_PROGRESS = 0;
 03564: 
 03565: 
+03566: ctypedef struct scoped_slot_t:
struct __pyx_t_7questdb_7_client_scoped_slot_t {
  void *owner;
  uintptr_t depth;
  uintptr_t dispatch;
};
 03567:     # Borrowed identity only, never dereferenced: the owning handle keeps
 03568:     # its token alive for as long as it can have calls in progress, a
 03569:     # dispatch context keeps it alive for as long as its callbacks can
 03570:     # run, and an entry is dropped the moment both its counts reach zero,
 03571:     # so an address a later token reuses is never already in the table.
 03572:     void* owner
 03573:     # Scoped calls in progress for this owner on this thread.
 03574:     uintptr_t depth
 03575:     # Callback dispatches in progress for this owner on this thread.
 03576:     uintptr_t dispatch
 03577: 
 03578: 
+03579: ctypedef struct scoped_table_t:
struct __pyx_t_7questdb_7_client_scoped_table_t {
  size_t used;
  size_t cap;
  __pyx_t_7questdb_7_client_scoped_slot_t *slots;
};
 03580:     size_t used
 03581:     size_t cap
 03582:     scoped_slot_t* slots
 03583: 
 03584: 
+03585: cdef const char* _SCOPED_TABLE_CAPSULE_NAME = b'questdb._client.scoped_table'
  __pyx_v_7questdb_7_client__SCOPED_TABLE_CAPSULE_NAME = __pyx_k_questdb__client_scoped_table;
 03586: 
 03587: # The key the owning capsule is stored under in each thread state's dict.
 03588: # The dict is shared by everything in the process, so the key is an object
 03589: # unique to this module instance: no other writer, including another loaded
 03590: # copy of this extension, can replace the capsule and free a table that a
 03591: # call in progress is using. A module global rather than a C constant, so
 03592: # a test can substitute a key whose hash runs code at the moment the table
 03593: # is first recorded.
+03594: _SCOPED_TABLE_KEY = object()
  __pyx_t_17 = NULL;
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_17, NULL};
    __pyx_t_25 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_object, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
    if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3594, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_25);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_SCOPED_TABLE_KEY, __pyx_t_25) < (0)) __PYX_ERR(0, 3594, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 03595: 
 03596: 
+03597: cdef void _scoped_table_free(object capsule) noexcept:
static void __pyx_f_7questdb_7_client__scoped_table_free(PyObject *__pyx_v_capsule) {
  __pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table;
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("questdb._client._scoped_table_free", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
}
+03598:     cdef scoped_table_t* table = <scoped_table_t*>PyCapsule_GetPointer(
  __pyx_t_1 = PyCapsule_GetPointer(__pyx_v_capsule, __pyx_v_7questdb_7_client__SCOPED_TABLE_CAPSULE_NAME); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 3598, __pyx_L1_error)
  __pyx_v_table = ((__pyx_t_7questdb_7_client_scoped_table_t *)__pyx_t_1);
 03599:         capsule, _SCOPED_TABLE_CAPSULE_NAME)
+03600:     if table == NULL:
  __pyx_t_2 = (__pyx_v_table == NULL);
  if (__pyx_t_2) {
/* … */
  }
+03601:         return
    goto __pyx_L0;
 03602:     # A thread's Python state can end while its OS thread lives on: every
 03603:     # call into Python from a native thread gets a fresh one. That state's
 03604:     # table is freed on its own thread, so the native slot is cleared here
 03605:     # and the next scoped call or dispatch on that thread builds a new
 03606:     # table. A thread state can also be cleared from another thread --
 03607:     # interpreter finalization clears the states of threads still running,
 03608:     # and a forked child those of the parent's other threads -- so the slot
 03609:     # is cleared only when it holds the table being freed.
+03610:     if <scoped_table_t*>PyThread_tss_get(&_SCOPED_DEPTH_KEY) == table:
  __pyx_t_2 = (((__pyx_t_7questdb_7_client_scoped_table_t *)PyThread_tss_get((&__pyx_v_7questdb_7_client__SCOPED_DEPTH_KEY))) == __pyx_v_table);
  if (__pyx_t_2) {
/* … */
  }
+03611:         PyThread_tss_set(&_SCOPED_DEPTH_KEY, NULL)
    (void)(PyThread_tss_set((&__pyx_v_7questdb_7_client__SCOPED_DEPTH_KEY), NULL));
+03612:     free(table.slots)
  free(__pyx_v_table->slots);
+03613:     free(table)
  free(__pyx_v_table);
 03614: 
 03615: 
+03616: cdef inline scoped_table_t* _scoped_table() noexcept:
static CYTHON_INLINE __pyx_t_7questdb_7_client_scoped_table_t *__pyx_f_7questdb_7_client__scoped_table(void) {
  __pyx_t_7questdb_7_client_scoped_table_t *__pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+03617:     return <scoped_table_t*>PyThread_tss_get(&_SCOPED_DEPTH_KEY)
  __pyx_r = ((__pyx_t_7questdb_7_client_scoped_table_t *)PyThread_tss_get((&__pyx_v_7questdb_7_client__SCOPED_DEPTH_KEY)));
  goto __pyx_L0;
 03618: 
 03619: 
+03620: cdef scoped_table_t* _scoped_table_ensure() except NULL:
static __pyx_t_7questdb_7_client_scoped_table_t *__pyx_f_7questdb_7_client__scoped_table_ensure(void) {
  __pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table;
  PyObject *__pyx_v_state_dict;
  PyObject *__pyx_v_capsule = NULL;
  __pyx_t_7questdb_7_client_scoped_table_t *__pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("questdb._client._scoped_table_ensure", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_capsule);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 03621:     """This thread's table, created on its first scoped call or callback
 03622:     dispatch.
 03623: 
 03624:     A capsule in the thread state's dict owns the table: it is what frees
 03625:     it when the thread state ends. The native key caches the same pointer
 03626:     so the per-row path never reaches the Python dict again.
 03627: 
 03628:     The thread state is shared by every greenlet on the OS thread, so the
 03629:     table's owner lives exactly as long as the per-thread cache, and no
 03630:     greenlet's exit frees a table another greenlet's suspended call is
 03631:     using.
 03632:     """
+03633:     cdef scoped_table_t* table = _scoped_table()
  __pyx_v_table = __pyx_f_7questdb_7_client__scoped_table();
 03634:     cdef PyObject* state_dict
+03635:     if table != NULL:
  __pyx_t_1 = (__pyx_v_table != NULL);
  if (__pyx_t_1) {
/* … */
  }
+03636:         return table
    __pyx_r = __pyx_v_table;
    goto __pyx_L0;
+03637:     state_dict = PyThreadState_GetDict()
  __pyx_v_state_dict = PyThreadState_GetDict();
+03638:     if state_dict == NULL:
  __pyx_t_1 = (__pyx_v_state_dict == NULL);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+03639:         raise RuntimeError('Could not reach the QuestDB thread state.')
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Could_not_reach_the_QuestDB_thre};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __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(0, 3639, __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(0, 3639, __pyx_L1_error)
+03640:     table = <scoped_table_t*>calloc(1, sizeof(scoped_table_t))
  __pyx_v_table = ((__pyx_t_7questdb_7_client_scoped_table_t *)calloc(1, (sizeof(__pyx_t_7questdb_7_client_scoped_table_t))));
+03641:     if table == NULL:
  __pyx_t_1 = (__pyx_v_table == NULL);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+03642:         raise MemoryError('Could not allocate QuestDB thread-use counters.')
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Could_not_allocate_QuestDB_threa};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_MemoryError)), __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(0, 3642, __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(0, 3642, __pyx_L1_error)
+03643:     table.slots = <scoped_slot_t*>malloc(
  __pyx_v_table->slots = ((__pyx_t_7questdb_7_client_scoped_slot_t *)malloc((__pyx_e_7questdb_7_client__SCOPED_TABLE_INIT_SLOTS * (sizeof(__pyx_t_7questdb_7_client_scoped_slot_t)))));
 03644:         _SCOPED_TABLE_INIT_SLOTS * sizeof(scoped_slot_t))
+03645:     if table.slots == NULL:
  __pyx_t_1 = (__pyx_v_table->slots == NULL);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+03646:         free(table)
    free(__pyx_v_table);
+03647:         raise MemoryError('Could not allocate QuestDB thread-use counters.')
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Could_not_allocate_QuestDB_threa};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_MemoryError)), __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(0, 3647, __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(0, 3647, __pyx_L1_error)
+03648:     table.cap = _SCOPED_TABLE_INIT_SLOTS
  __pyx_v_table->cap = __pyx_e_7questdb_7_client__SCOPED_TABLE_INIT_SLOTS;
+03649:     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_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_L9_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_L12_try_end:;
  }
+03650:         capsule = PyCapsule_New(
      __pyx_t_2 = PyCapsule_New(__pyx_v_table, __pyx_v_7questdb_7_client__SCOPED_TABLE_CAPSULE_NAME, ((PyCapsule_Destructor)__pyx_f_7questdb_7_client__scoped_table_free)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3650, __pyx_L7_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_v_capsule = __pyx_t_2;
      __pyx_t_2 = 0;
 03651:             table, _SCOPED_TABLE_CAPSULE_NAME,
 03652:             <PyCapsule_Destructor>_scoped_table_free)
+03653:     except:
    /*except:*/ {
      __Pyx_AddTraceback("questdb._client._scoped_table_ensure", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_8) < 0) __PYX_ERR(0, 3653, __pyx_L9_except_error)
      __Pyx_XGOTREF(__pyx_t_2);
      __Pyx_XGOTREF(__pyx_t_3);
      __Pyx_XGOTREF(__pyx_t_8);
+03654:         free(table.slots)
      free(__pyx_v_table->slots);
+03655:         free(table)
      free(__pyx_v_table);
+03656:         raise
      __Pyx_GIVEREF(__pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_3, __pyx_t_8);
      __pyx_t_2 = 0;  __pyx_t_3 = 0;  __pyx_t_8 = 0; 
      __PYX_ERR(0, 3656, __pyx_L9_except_error)
    }
 03657:     # From here the capsule owns the table, so every later failure hands
 03658:     # the cleanup to it by letting it go out of scope.
+03659:     if PyThread_tss_set(&_SCOPED_DEPTH_KEY, <void*>table) != 0:
  __pyx_t_1 = (PyThread_tss_set((&__pyx_v_7questdb_7_client__SCOPED_DEPTH_KEY), ((void *)__pyx_v_table)) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+03660:         raise RuntimeError('Could not record a QuestDB thread-use counter.')
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Could_not_record_a_QuestDB_threa};
      __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __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_8)) __PYX_ERR(0, 3660, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
    }
    __Pyx_Raise(__pyx_t_8, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __PYX_ERR(0, 3660, __pyx_L1_error)
+03661:     try:
  {
    /*try:*/ {
/* … */
    }
    __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_L21_try_end;
    __pyx_L16_error:;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
    __pyx_L18_except_error:;
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_6, __pyx_t_5);
    goto __pyx_L1_error;
    __pyx_L21_try_end:;
  }
+03662:         (<dict>state_dict)[_SCOPED_TABLE_KEY] = capsule
      if (unlikely(((PyObject *)__pyx_v_state_dict) == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 3662, __pyx_L16_error)
      }
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_SCOPED_TABLE_KEY); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3662, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (unlikely((PyDict_SetItem(((PyObject*)__pyx_v_state_dict), __pyx_t_8, __pyx_v_capsule) < 0))) __PYX_ERR(0, 3662, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+03663:     except:
    /*except:*/ {
      __Pyx_AddTraceback("questdb._client._scoped_table_ensure", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_3, &__pyx_t_2) < 0) __PYX_ERR(0, 3663, __pyx_L18_except_error)
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_3);
      __Pyx_XGOTREF(__pyx_t_2);
+03664:         PyThread_tss_set(&_SCOPED_DEPTH_KEY, NULL)
      (void)(PyThread_tss_set((&__pyx_v_7questdb_7_client__SCOPED_DEPTH_KEY), NULL));
+03665:         raise
      __Pyx_GIVEREF(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_ErrRestoreWithState(__pyx_t_8, __pyx_t_3, __pyx_t_2);
      __pyx_t_8 = 0;  __pyx_t_3 = 0;  __pyx_t_2 = 0; 
      __PYX_ERR(0, 3665, __pyx_L18_except_error)
    }
+03666:     return table
  __pyx_r = __pyx_v_table;
  goto __pyx_L0;
 03667: 
 03668: 
+03669: cdef inline scoped_slot_t* _scoped_slot(
static CYTHON_INLINE __pyx_t_7questdb_7_client_scoped_slot_t *__pyx_f_7questdb_7_client__scoped_slot(__pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table, void *__pyx_v_owner) {
  size_t __pyx_v_i;
  __pyx_t_7questdb_7_client_scoped_slot_t *__pyx_v_slots;
  __pyx_t_7questdb_7_client_scoped_slot_t *__pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 03670:         scoped_table_t* table, void* owner) noexcept:
 03671:     cdef size_t i
+03672:     cdef scoped_slot_t* slots = table.slots
  __pyx_t_1 = __pyx_v_table->slots;
  __pyx_v_slots = __pyx_t_1;
+03673:     for i in range(table.used):
  __pyx_t_2 = __pyx_v_table->used;
  __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;
+03674:         if slots[i].owner == owner:
    __pyx_t_5 = ((__pyx_v_slots[__pyx_v_i]).owner == __pyx_v_owner);
    if (__pyx_t_5) {
/* … */
    }
  }
+03675:             return &slots[i]
      __pyx_r = (&(__pyx_v_slots[__pyx_v_i]));
      goto __pyx_L0;
+03676:     return NULL
  __pyx_r = NULL;
  goto __pyx_L0;
 03677: 
 03678: 
+03679: cdef uintptr_t _scoped_depth_for(object owner_token) except? <uintptr_t>-1:
static uintptr_t __pyx_f_7questdb_7_client__scoped_depth_for(PyObject *__pyx_v_owner_token) {
  __pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table;
  __pyx_t_7questdb_7_client_scoped_slot_t *__pyx_v_slot;
  uintptr_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+03680:     cdef scoped_table_t* table = _scoped_table()
  __pyx_v_table = __pyx_f_7questdb_7_client__scoped_table();
 03681:     cdef scoped_slot_t* slot
+03682:     if table == NULL:
  __pyx_t_1 = (__pyx_v_table == NULL);
  if (__pyx_t_1) {
/* … */
  }
+03683:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
+03684:     slot = _scoped_slot(table, <void*>owner_token)
  __pyx_v_slot = __pyx_f_7questdb_7_client__scoped_slot(__pyx_v_table, ((void *)__pyx_v_owner_token));
+03685:     if slot == NULL:
  __pyx_t_1 = (__pyx_v_slot == NULL);
  if (__pyx_t_1) {
/* … */
  }
+03686:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
+03687:     return slot.depth
  __pyx_r = __pyx_v_slot->depth;
  goto __pyx_L0;
 03688: 
 03689: 
+03690: cdef inline scoped_slot_t* _scoped_slot_add(
static CYTHON_INLINE __pyx_t_7questdb_7_client_scoped_slot_t *__pyx_f_7questdb_7_client__scoped_slot_add(__pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table, void *__pyx_v_owner) {
  size_t __pyx_v_cap;
  __pyx_t_7questdb_7_client_scoped_slot_t *__pyx_v_grown;
  __pyx_t_7questdb_7_client_scoped_slot_t *__pyx_v_slot;
  __pyx_t_7questdb_7_client_scoped_slot_t *__pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._scoped_slot_add", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 03691:         scoped_table_t* table, void* owner) except NULL:
 03692:     """Append an entry for `owner` with both counts at zero."""
 03693:     cdef size_t cap
 03694:     cdef scoped_slot_t* grown
 03695:     cdef scoped_slot_t* slot
+03696:     if table.used == table.cap:
  __pyx_t_1 = (__pyx_v_table->used == __pyx_v_table->cap);
  if (__pyx_t_1) {
/* … */
  }
+03697:         cap = table.cap * 2
    __pyx_v_cap = (__pyx_v_table->cap * 2);
+03698:         grown = <scoped_slot_t*>realloc(
    __pyx_v_grown = ((__pyx_t_7questdb_7_client_scoped_slot_t *)realloc(__pyx_v_table->slots, (__pyx_v_cap * (sizeof(__pyx_t_7questdb_7_client_scoped_slot_t)))));
 03699:             table.slots, cap * sizeof(scoped_slot_t))
+03700:         if grown == NULL:
    __pyx_t_1 = (__pyx_v_grown == NULL);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+03701:             raise MemoryError(
      __pyx_t_3 = NULL;
      __pyx_t_4 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Could_not_allocate_QuestDB_threa};
        __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_MemoryError)), __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(0, 3701, __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(0, 3701, __pyx_L1_error)
 03702:                 'Could not allocate QuestDB thread-use counters.')
+03703:         table.slots = grown
    __pyx_v_table->slots = __pyx_v_grown;
+03704:         table.cap = cap
    __pyx_v_table->cap = __pyx_v_cap;
+03705:     slot = &table.slots[table.used]
  __pyx_v_slot = (&(__pyx_v_table->slots[__pyx_v_table->used]));
+03706:     slot.owner = owner
  __pyx_v_slot->owner = __pyx_v_owner;
+03707:     slot.depth = 0
  __pyx_v_slot->depth = 0;
+03708:     slot.dispatch = 0
  __pyx_v_slot->dispatch = 0;
+03709:     table.used += 1
  __pyx_v_table->used = (__pyx_v_table->used + 1);
+03710:     return slot
  __pyx_r = __pyx_v_slot;
  goto __pyx_L0;
 03711: 
 03712: 
+03713: cdef inline void _scoped_slot_drop_if_idle(
static CYTHON_INLINE void __pyx_f_7questdb_7_client__scoped_slot_drop_if_idle(__pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table, __pyx_t_7questdb_7_client_scoped_slot_t *__pyx_v_slot) {
/* … */
  /* function exit code */
}
 03714:         scoped_table_t* table, scoped_slot_t* slot) noexcept:
 03715:     # Vacated by moving the last entry down, which keeps the scan over
 03716:     # `used` dense and drops the borrowed owner address.
+03717:     if slot.depth == 0 and slot.dispatch == 0:
  __pyx_t_2 = (__pyx_v_slot->depth == 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_slot->dispatch == 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+03718:         table.used -= 1
    __pyx_v_table->used = (__pyx_v_table->used - 1);
+03719:         slot[0] = table.slots[table.used]
    (__pyx_v_slot[0]) = (__pyx_v_table->slots[__pyx_v_table->used]);
 03720: 
 03721: 
+03722: cdef void _enter_scoped_for(object owner_token) except *:
static void __pyx_f_7questdb_7_client__enter_scoped_for(PyObject *__pyx_v_owner_token) {
  __pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table;
  void *__pyx_v_owner;
  __pyx_t_7questdb_7_client_scoped_slot_t *__pyx_v_slot;
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client._enter_scoped_for", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
}
+03723:     cdef scoped_table_t* table = _scoped_table_ensure()
  __pyx_t_1 = __pyx_f_7questdb_7_client__scoped_table_ensure(); if (unlikely(__pyx_t_1 == ((void *)NULL))) __PYX_ERR(0, 3723, __pyx_L1_error)
  __pyx_v_table = __pyx_t_1;
+03724:     cdef void* owner = <void*>owner_token
  __pyx_v_owner = ((void *)__pyx_v_owner_token);
+03725:     cdef scoped_slot_t* slot = _scoped_slot(table, owner)
  __pyx_v_slot = __pyx_f_7questdb_7_client__scoped_slot(__pyx_v_table, __pyx_v_owner);
+03726:     if slot == NULL:
  __pyx_t_2 = (__pyx_v_slot == NULL);
  if (__pyx_t_2) {
/* … */
  }
+03727:         slot = _scoped_slot_add(table, owner)
    __pyx_t_3 = __pyx_f_7questdb_7_client__scoped_slot_add(__pyx_v_table, __pyx_v_owner); if (unlikely(__pyx_t_3 == ((void *)NULL))) __PYX_ERR(0, 3727, __pyx_L1_error)
    __pyx_v_slot = __pyx_t_3;
+03728:     slot.depth += 1
  __pyx_v_slot->depth = (__pyx_v_slot->depth + 1);
 03729: 
 03730: 
+03731: cdef void _exit_scoped_for(object owner_token) except *:
static void __pyx_f_7questdb_7_client__exit_scoped_for(PyObject *__pyx_v_owner_token) {
  __pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table;
  __pyx_t_7questdb_7_client_scoped_slot_t *__pyx_v_slot;
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._exit_scoped_for", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}
+03732:     cdef scoped_table_t* table = _scoped_table()
  __pyx_v_table = __pyx_f_7questdb_7_client__scoped_table();
 03733:     cdef scoped_slot_t* slot
+03734:     if table == NULL:
  __pyx_t_1 = (__pyx_v_table == NULL);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+03735:         raise RuntimeError('QuestDB thread-use counter underflow.')
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_QuestDB_thread_use_counter_under};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __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(0, 3735, __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(0, 3735, __pyx_L1_error)
+03736:     slot = _scoped_slot(table, <void*>owner_token)
  __pyx_v_slot = __pyx_f_7questdb_7_client__scoped_slot(__pyx_v_table, ((void *)__pyx_v_owner_token));
+03737:     if slot == NULL or slot.depth == 0:
  __pyx_t_5 = (__pyx_v_slot == NULL);
  if (!__pyx_t_5) {
  } else {
    __pyx_t_1 = __pyx_t_5;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_5 = (__pyx_v_slot->depth == 0);
  __pyx_t_1 = __pyx_t_5;
  __pyx_L5_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+03738:         raise RuntimeError('QuestDB thread-use counter underflow.')
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_QuestDB_thread_use_counter_under};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __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(0, 3738, __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(0, 3738, __pyx_L1_error)
+03739:     slot.depth -= 1
  __pyx_v_slot->depth = (__pyx_v_slot->depth - 1);
+03740:     _scoped_slot_drop_if_idle(table, slot)
  __pyx_f_7questdb_7_client__scoped_slot_drop_if_idle(__pyx_v_table, __pyx_v_slot);
 03741: 
 03742: 
+03743: cdef void _enter_dispatch(object owner_token) except *:
static void __pyx_f_7questdb_7_client__enter_dispatch(PyObject *__pyx_v_owner_token) {
  __pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table;
  void *__pyx_v_owner;
  __pyx_t_7questdb_7_client_scoped_slot_t *__pyx_v_slot;
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client._enter_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
}
 03744:     global _DISPATCHES_IN_PROGRESS
+03745:     cdef scoped_table_t* table = _scoped_table_ensure()
  __pyx_t_1 = __pyx_f_7questdb_7_client__scoped_table_ensure(); if (unlikely(__pyx_t_1 == ((void *)NULL))) __PYX_ERR(0, 3745, __pyx_L1_error)
  __pyx_v_table = __pyx_t_1;
+03746:     cdef void* owner = <void*>owner_token
  __pyx_v_owner = ((void *)__pyx_v_owner_token);
+03747:     cdef scoped_slot_t* slot = _scoped_slot(table, owner)
  __pyx_v_slot = __pyx_f_7questdb_7_client__scoped_slot(__pyx_v_table, __pyx_v_owner);
+03748:     if slot == NULL:
  __pyx_t_2 = (__pyx_v_slot == NULL);
  if (__pyx_t_2) {
/* … */
  }
+03749:         slot = _scoped_slot_add(table, owner)
    __pyx_t_3 = __pyx_f_7questdb_7_client__scoped_slot_add(__pyx_v_table, __pyx_v_owner); if (unlikely(__pyx_t_3 == ((void *)NULL))) __PYX_ERR(0, 3749, __pyx_L1_error)
    __pyx_v_slot = __pyx_t_3;
+03750:     slot.dispatch += 1
  __pyx_v_slot->dispatch = (__pyx_v_slot->dispatch + 1);
+03751:     _DISPATCHES_IN_PROGRESS += 1
  __pyx_v_7questdb_7_client__DISPATCHES_IN_PROGRESS = (__pyx_v_7questdb_7_client__DISPATCHES_IN_PROGRESS + 1);
 03752: 
 03753: 
+03754: cdef void _exit_dispatch(object owner_token) except *:
static void __pyx_f_7questdb_7_client__exit_dispatch(PyObject *__pyx_v_owner_token) {
  __pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table;
  __pyx_t_7questdb_7_client_scoped_slot_t *__pyx_v_slot;
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._exit_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}
 03755:     global _DISPATCHES_IN_PROGRESS
+03756:     cdef scoped_table_t* table = _scoped_table()
  __pyx_v_table = __pyx_f_7questdb_7_client__scoped_table();
 03757:     cdef scoped_slot_t* slot
+03758:     if table == NULL:
  __pyx_t_1 = (__pyx_v_table == NULL);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+03759:         raise RuntimeError('QuestDB callback-dispatch counter underflow.')
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_QuestDB_callback_dispatch_counte};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __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(0, 3759, __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(0, 3759, __pyx_L1_error)
+03760:     slot = _scoped_slot(table, <void*>owner_token)
  __pyx_v_slot = __pyx_f_7questdb_7_client__scoped_slot(__pyx_v_table, ((void *)__pyx_v_owner_token));
+03761:     if slot == NULL or slot.dispatch == 0:
  __pyx_t_5 = (__pyx_v_slot == NULL);
  if (!__pyx_t_5) {
  } else {
    __pyx_t_1 = __pyx_t_5;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_5 = (__pyx_v_slot->dispatch == 0);
  __pyx_t_1 = __pyx_t_5;
  __pyx_L5_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+03762:         raise RuntimeError('QuestDB callback-dispatch counter underflow.')
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_QuestDB_callback_dispatch_counte};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __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(0, 3762, __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(0, 3762, __pyx_L1_error)
+03763:     slot.dispatch -= 1
  __pyx_v_slot->dispatch = (__pyx_v_slot->dispatch - 1);
+03764:     _DISPATCHES_IN_PROGRESS -= 1
  __pyx_v_7questdb_7_client__DISPATCHES_IN_PROGRESS = (__pyx_v_7questdb_7_client__DISPATCHES_IN_PROGRESS - 1);
+03765:     _scoped_slot_drop_if_idle(table, slot)
  __pyx_f_7questdb_7_client__scoped_slot_drop_if_idle(__pyx_v_table, __pyx_v_slot);
 03766: 
 03767: 
+03768: cdef inline bint _dispatching_for(object owner_token) noexcept:
static CYTHON_INLINE int __pyx_f_7questdb_7_client__dispatching_for(PyObject *__pyx_v_owner_token) {
  __pyx_t_7questdb_7_client_scoped_table_t *__pyx_v_table;
  __pyx_t_7questdb_7_client_scoped_slot_t *__pyx_v_slot;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 03769:     cdef scoped_table_t* table
 03770:     cdef scoped_slot_t* slot
+03771:     if _DISPATCHES_IN_PROGRESS == 0:
  __pyx_t_1 = (__pyx_v_7questdb_7_client__DISPATCHES_IN_PROGRESS == 0);
  if (__pyx_t_1) {
/* … */
  }
+03772:         return False
    __pyx_r = 0;
    goto __pyx_L0;
+03773:     table = _scoped_table()
  __pyx_v_table = __pyx_f_7questdb_7_client__scoped_table();
+03774:     if table == NULL:
  __pyx_t_1 = (__pyx_v_table == NULL);
  if (__pyx_t_1) {
/* … */
  }
+03775:         return False
    __pyx_r = 0;
    goto __pyx_L0;
+03776:     slot = _scoped_slot(table, <void*>owner_token)
  __pyx_v_slot = __pyx_f_7questdb_7_client__scoped_slot(__pyx_v_table, ((void *)__pyx_v_owner_token));
+03777:     return slot != NULL and slot.dispatch != 0
  __pyx_t_2 = (__pyx_v_slot != NULL);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_slot->dispatch != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L5_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 03778: 
 03779: 
+03780: cdef void _connection_event_dispatch(
static void __pyx_f_7questdb_7_client__connection_event_dispatch(void *__pyx_v_user_data, struct questdb_connection_event const *__pyx_v_event) {
  struct __pyx_obj_7questdb_7_client__DispatchContext *__pyx_v_context = 0;
  int __pyx_v_entered;
  PyObject *__pyx_v_kind = NULL;
  PyObject *__pyx_v_entry = NULL;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_8);
  __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_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_XDECREF(__pyx_t_22);
  __Pyx_WriteUnraisable("questdb._client._connection_event_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_context);
  __Pyx_XDECREF(__pyx_v_kind);
  __Pyx_XDECREF(__pyx_v_entry);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
}
 03781:         void* user_data,
 03782:         const questdb_connection_event* event) noexcept with gil:
+03783:     cdef _DispatchContext context = <_DispatchContext>user_data
  __pyx_t_1 = ((PyObject *)__pyx_v_user_data);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_context = ((struct __pyx_obj_7questdb_7_client__DispatchContext *)__pyx_t_1);
  __pyx_t_1 = 0;
+03784:     cdef bint entered = False
  __pyx_v_entered = 0;
+03785:     try:
  /*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_L11_try_end;
      __pyx_L6_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_13); __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __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;
      __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
      __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
      __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
      __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 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_3);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
      goto __pyx_L4_error;
      __pyx_L7_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_L11_try_end:;
    }
  }
+03786:         _enter_dispatch(context.owner_token)
        __pyx_t_1 = __pyx_v_context->owner_token;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_f_7questdb_7_client__enter_dispatch(__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3786, __pyx_L6_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+03787:         entered = True
        __pyx_v_entered = 1;
+03788:         kind = ConnectionEventKind.Connected
        __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ConnectionEventKind); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3788, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_Connected); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3788, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_v_kind = __pyx_t_5;
        __pyx_t_5 = 0;
+03789:         for entry in ConnectionEventKind:
        __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ConnectionEventKind); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3789, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_5);
        if (likely(PyList_CheckExact(__pyx_t_5)) || PyTuple_CheckExact(__pyx_t_5)) {
          __pyx_t_1 = __pyx_t_5; __Pyx_INCREF(__pyx_t_1);
          __pyx_t_6 = 0;
          __pyx_t_7 = NULL;
        } else {
          __pyx_t_6 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3789, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3789, __pyx_L6_error)
        }
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        for (;;) {
          if (likely(!__pyx_t_7)) {
            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(0, 3789, __pyx_L6_error)
                #endif
                if (__pyx_t_6 >= __pyx_temp) break;
              }
              __pyx_t_5 = __Pyx_PyList_GetItemRefFast(__pyx_t_1, __pyx_t_6, __Pyx_ReferenceSharing_OwnStrongReference);
              ++__pyx_t_6;
            } 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(0, 3789, __pyx_L6_error)
                #endif
                if (__pyx_t_6 >= __pyx_temp) break;
              }
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_5 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_6));
              #else
              __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_6);
              #endif
              ++__pyx_t_6;
            }
            if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3789, __pyx_L6_error)
          } else {
            __pyx_t_5 = __pyx_t_7(__pyx_t_1);
            if (unlikely(!__pyx_t_5)) {
              PyObject* exc_type = PyErr_Occurred();
              if (exc_type) {
                if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 3789, __pyx_L6_error)
                PyErr_Clear();
              }
              break;
            }
          }
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_XDECREF_SET(__pyx_v_entry, __pyx_t_5);
          __pyx_t_5 = 0;
/* … */
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L15_for_end;
        __pyx_L13_break:;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L15_for_end;
        __pyx_L15_for_end:;
+03790:             if entry.c_value == <int>event.kind:
          __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_entry, __pyx_mstate_global->__pyx_n_u_c_value); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3790, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_8 = __Pyx_PyLong_From_int(((int)__pyx_v_event->kind)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3790, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_9 = PyObject_RichCompare(__pyx_t_5, __pyx_t_8, Py_EQ); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3790, __pyx_L6_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 3790, __pyx_L6_error)
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (__pyx_t_10) {
/* … */
          }
+03791:                 kind = entry
            __Pyx_INCREF(__pyx_v_entry);
            __Pyx_DECREF_SET(__pyx_v_kind, __pyx_v_entry);
+03792:                 break
            goto __pyx_L13_break;
+03793:         context.connection_listener(ConnectionEvent(
        __pyx_t_9 = NULL;
        __Pyx_INCREF(__pyx_v_context->connection_listener);
        __pyx_t_8 = __pyx_v_context->connection_listener; 
        __pyx_t_11 = NULL;
        __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_ConnectionEvent); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3793, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_12);
 03794:             kind=kind,
+03795:             host=_conn_event_str(event.host, event.host_len),
        __pyx_t_13 = __pyx_f_7questdb_7_client__conn_event_str(__pyx_v_event->host, __pyx_v_event->host_len); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3795, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_13);
+03796:             port=_conn_event_str(event.port, event.port_len),
        __pyx_t_14 = __pyx_f_7questdb_7_client__conn_event_str(__pyx_v_event->port, __pyx_v_event->port_len); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3796, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_14);
+03797:             previous_host=_conn_event_str(
        __pyx_t_15 = __pyx_f_7questdb_7_client__conn_event_str(__pyx_v_event->previous_host, __pyx_v_event->previous_host_len); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 3797, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_15);
 03798:                 event.previous_host, event.previous_host_len),
+03799:             previous_port=_conn_event_str(
        __pyx_t_16 = __pyx_f_7questdb_7_client__conn_event_str(__pyx_v_event->previous_port, __pyx_v_event->previous_port_len); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 3799, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_16);
 03800:                 event.previous_port, event.previous_port_len),
+03801:             attempt_number=event.attempt_number
          __pyx_t_18 = __Pyx_PyLong_From_uint64_t(__pyx_v_event->attempt_number); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3801, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_17 = __pyx_t_18;
          __pyx_t_18 = 0;
        } else {
+03802:                 if event.has_attempt else None,
        __pyx_t_10 = (__pyx_v_event->has_attempt != 0);
        if (__pyx_t_10) {
/* … */
          __Pyx_INCREF(Py_None);
          __pyx_t_17 = Py_None;
        }
+03803:             cause_code=c_err_code_to_py(event.cause_code)
          __pyx_t_19 = __pyx_f_7questdb_7_client_c_err_code_to_py(__pyx_v_event->cause_code); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 3803, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_19);
          __pyx_t_18 = __pyx_t_19;
          __pyx_t_19 = 0;
        } else {
+03804:                 if event.has_cause else None,
        __pyx_t_10 = (__pyx_v_event->has_cause != 0);
        if (__pyx_t_10) {
/* … */
          __Pyx_INCREF(Py_None);
          __pyx_t_18 = Py_None;
        }
+03805:             cause_msg=_conn_event_str(event.cause_msg, event.cause_msg_len)
          __pyx_t_20 = __pyx_f_7questdb_7_client__conn_event_str(__pyx_v_event->cause_msg, __pyx_v_event->cause_msg_len); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3805, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_20);
          __pyx_t_19 = __pyx_t_20;
          __pyx_t_20 = 0;
        } else {
+03806:                 if event.has_cause else None,
        __pyx_t_10 = (__pyx_v_event->has_cause != 0);
        if (__pyx_t_10) {
/* … */
          __Pyx_INCREF(Py_None);
          __pyx_t_19 = Py_None;
        }
+03807:             timestamp_millis=event.timestamp_millis))
        __pyx_t_20 = __Pyx_PyLong_From_int64_t(__pyx_v_event->timestamp_millis); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3807, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_20);
        __pyx_t_21 = 1;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_12))) {
          __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_12);
          assert(__pyx_t_11);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_12);
          __Pyx_INCREF(__pyx_t_11);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_12, __pyx__function);
          __pyx_t_21 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 9 : 0)] = {__pyx_t_11, NULL};
          __pyx_t_22 = __Pyx_MakeVectorcallBuilderKwds(9); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 3793, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_22);
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_kind, __pyx_v_kind, __pyx_t_22, __pyx_callargs+1, 0) < (0)) __PYX_ERR(0, 3793, __pyx_L6_error)
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_host, __pyx_t_13, __pyx_t_22, __pyx_callargs+1, 1) < (0)) __PYX_ERR(0, 3793, __pyx_L6_error)
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_port, __pyx_t_14, __pyx_t_22, __pyx_callargs+1, 2) < (0)) __PYX_ERR(0, 3793, __pyx_L6_error)
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_previous_host, __pyx_t_15, __pyx_t_22, __pyx_callargs+1, 3) < (0)) __PYX_ERR(0, 3793, __pyx_L6_error)
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_previous_port, __pyx_t_16, __pyx_t_22, __pyx_callargs+1, 4) < (0)) __PYX_ERR(0, 3793, __pyx_L6_error)
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_attempt_number, __pyx_t_17, __pyx_t_22, __pyx_callargs+1, 5) < (0)) __PYX_ERR(0, 3793, __pyx_L6_error)
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_cause_code, __pyx_t_18, __pyx_t_22, __pyx_callargs+1, 6) < (0)) __PYX_ERR(0, 3793, __pyx_L6_error)
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_cause_msg, __pyx_t_19, __pyx_t_22, __pyx_callargs+1, 7) < (0)) __PYX_ERR(0, 3793, __pyx_L6_error)
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_timestamp_millis, __pyx_t_20, __pyx_t_22, __pyx_callargs+1, 8) < (0)) __PYX_ERR(0, 3793, __pyx_L6_error)
          __pyx_t_5 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_12, __pyx_callargs+__pyx_t_21, (1-__pyx_t_21) | (__pyx_t_21*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_22);
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_DECREF(__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;
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_DECREF(__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;
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3793, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_5);
        }
        __pyx_t_21 = 1;
        #if CYTHON_UNPACK_METHODS
        if (likely(PyMethod_Check(__pyx_t_8))) {
          __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8);
          assert(__pyx_t_9);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
          __Pyx_INCREF(__pyx_t_9);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
          __pyx_t_21 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_5};
          __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_21, (2-__pyx_t_21) | (__pyx_t_21*__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_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3793, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_1);
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+03808:     except BaseException:
      __pyx_t_23 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
      if (__pyx_t_23) {
        __Pyx_AddTraceback("questdb._client._connection_event_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_8, &__pyx_t_5) < 0) __PYX_ERR(0, 3808, __pyx_L8_except_error)
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_5);
+03809:         logging.getLogger("questdb").exception(
        __pyx_t_20 = NULL;
        __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 3809, __pyx_L8_except_error)
        __Pyx_GOTREF(__pyx_t_19);
        __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_getLogger); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3809, __pyx_L8_except_error)
        __Pyx_GOTREF(__pyx_t_18);
        __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
        __pyx_t_21 = 1;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_18))) {
          __pyx_t_20 = PyMethod_GET_SELF(__pyx_t_18);
          assert(__pyx_t_20);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_18);
          __Pyx_INCREF(__pyx_t_20);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_18, __pyx__function);
          __pyx_t_21 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_20, __pyx_mstate_global->__pyx_n_u_questdb};
          __pyx_t_22 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_18, __pyx_callargs+__pyx_t_21, (2-__pyx_t_21) | (__pyx_t_21*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 3809, __pyx_L8_except_error)
          __Pyx_GOTREF(__pyx_t_22);
        }
        __pyx_t_12 = __pyx_t_22;
        __Pyx_INCREF(__pyx_t_12);
        __pyx_t_21 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_mstate_global->__pyx_kp_u_connection_event_listener_failed};
          __pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_exception, __pyx_callargs+__pyx_t_21, (2-__pyx_t_21) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3809, __pyx_L8_except_error)
          __Pyx_GOTREF(__pyx_t_9);
        }
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        goto __pyx_L7_exception_handled;
      }
      goto __pyx_L8_except_error;
 03810:             "connection event listener failed")
 03811:     finally:
+03812:         if entered:
  /*finally:*/ {
    /*normal exit:*/{
      if (__pyx_v_entered) {
/* … */
      }
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_4 = 0; __pyx_t_3 = 0; __pyx_t_2 = 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_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_14); __pyx_t_14 = 0;
      __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;
      __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
      __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
      __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
      __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 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_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_26);
      __Pyx_XGOTREF(__pyx_t_27);
      __Pyx_XGOTREF(__pyx_t_28);
      __pyx_t_23 = __pyx_lineno; __pyx_t_24 = __pyx_clineno; __pyx_t_25 = __pyx_filename;
      {
        if (__pyx_v_entered) {
/* … */
        }
      }
      __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_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_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0;
      __pyx_lineno = __pyx_t_23; __pyx_clineno = __pyx_t_24; __pyx_filename = __pyx_t_25;
      goto __pyx_L1_error;
      __pyx_L20_error:;
      __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_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_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }
+03813:             _exit_dispatch(context.owner_token)
        __pyx_t_5 = __pyx_v_context->owner_token;
        __Pyx_INCREF(__pyx_t_5);
        __pyx_f_7questdb_7_client__exit_dispatch(__pyx_t_5); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3813, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
          __pyx_t_5 = __pyx_v_context->owner_token;
          __Pyx_INCREF(__pyx_t_5);
          __pyx_f_7questdb_7_client__exit_dispatch(__pyx_t_5); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3813, __pyx_L20_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 03814: 
 03815: 
+03816: def _debug_connection_event_dispatch(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_103_debug_connection_event_dispatch(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_102_debug_connection_event_dispatch, "Internal test seam: dispatch a connection event of ``kind_ordinal``.\n\n    ``target`` is either the dispatch context a handle registered with its\n    native dispatcher (see `_debug_registered_connection_listener`), which\n    dispatches exactly as that handle's own callback would, or a plain\n    listener, which is dispatched for an owner nothing else holds.\n    ");
static PyMethodDef __pyx_mdef_7questdb_7_client_103_debug_connection_event_dispatch = {"_debug_connection_event_dispatch", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_103_debug_connection_event_dispatch, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_102_debug_connection_event_dispatch};
static PyObject *__pyx_pw_7questdb_7_client_103_debug_connection_event_dispatch(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
) {
  uint32_t __pyx_v_kind_ordinal;
  PyObject *__pyx_v_target = 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_connection_event_dispatch (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_ordinal,&__pyx_mstate_global->__pyx_n_u_target,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(0, 3816, __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(0, 3816, __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(0, 3816, __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_connection_event_dispatch", 0) < (0)) __PYX_ERR(0, 3816, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_connection_event_dispatch", 1, 2, 2, i); __PYX_ERR(0, 3816, __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(0, 3816, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 3816, __pyx_L3_error)
    }
    __pyx_v_kind_ordinal = __Pyx_PyLong_As_uint32_t(values[0]); if (unlikely((__pyx_v_kind_ordinal == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3817, __pyx_L3_error)
    __pyx_v_target = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_debug_connection_event_dispatch", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 3816, __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_connection_event_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_102_debug_connection_event_dispatch(__pyx_self, __pyx_v_kind_ordinal, __pyx_v_target);
  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_102_debug_connection_event_dispatch(CYTHON_UNUSED PyObject *__pyx_self, uint32_t __pyx_v_kind_ordinal, PyObject *__pyx_v_target) {
  struct questdb_connection_event __pyx_v_event;
  struct __pyx_obj_7questdb_7_client__DispatchContext *__pyx_v_context = 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_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._debug_connection_event_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_context);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_103_debug_connection_event_dispatch, 0, __pyx_mstate_global->__pyx_n_u_debug_connection_event_dispatch, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[200])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3816, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_connection_event_dispatch, __pyx_t_25) < (0)) __PYX_ERR(0, 3816, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 03817:         uint32_t kind_ordinal, object target):
 03818:     """Internal test seam: dispatch a connection event of ``kind_ordinal``.
 03819: 
 03820:     ``target`` is either the dispatch context a handle registered with its
 03821:     native dispatcher (see `_debug_registered_connection_listener`), which
 03822:     dispatches exactly as that handle's own callback would, or a plain
 03823:     listener, which is dispatched for an owner nothing else holds.
 03824:     """
 03825:     cdef questdb_connection_event event
 03826:     cdef _DispatchContext context
+03827:     if isinstance(target, _DispatchContext):
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_target, __pyx_mstate_global->__pyx_ptype_7questdb_7_client__DispatchContext); 
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+03828:         context = <_DispatchContext>target
    __pyx_t_2 = __pyx_v_target;
    __Pyx_INCREF(__pyx_t_2);
    __pyx_v_context = ((struct __pyx_obj_7questdb_7_client__DispatchContext *)__pyx_t_2);
    __pyx_t_2 = 0;
 03829:     else:
+03830:         context = _new_dispatch_context(object(), None, target)
  /*else*/ {
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_object, __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_2)) __PYX_ERR(0, 3830, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_t_3 = ((PyObject *)__pyx_f_7questdb_7_client__new_dispatch_context(__pyx_t_2, Py_None, __pyx_v_target)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3830, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_context = ((struct __pyx_obj_7questdb_7_client__DispatchContext *)__pyx_t_3);
    __pyx_t_3 = 0;
  }
  __pyx_L3:;
+03831:     memset(&event, 0, sizeof(questdb_connection_event))
  (void)(memset((&__pyx_v_event), 0, (sizeof(struct questdb_connection_event))));
+03832:     event.kind = kind_ordinal
  __pyx_v_event.kind = __pyx_v_kind_ordinal;
+03833:     _connection_event_dispatch(<void*>context, &event)
  __pyx_f_7questdb_7_client__connection_event_dispatch(((void *)__pyx_v_context), (&__pyx_v_event));
 03834: 
 03835: 
+03836: cdef void _connection_event_trampoline(
static void __pyx_f_7questdb_7_client__connection_event_trampoline(void *__pyx_v_user_data, struct questdb_connection_event const *__pyx_v_event) {
/* … */
  /* function exit code */
  __pyx_L0:;
}
 03837:         void* user_data,
 03838:         const questdb_connection_event* event) noexcept nogil:
 03839:     # No object locals here: the finalizing early return must not touch
 03840:     # the GIL, which a Cython epilogue with object cleanup would.
+03841:     if qdb_py_is_finalizing():
  __pyx_t_1 = qdb_py_is_finalizing();
  if (__pyx_t_1) {
/* … */
  }
+03842:         return
    goto __pyx_L0;
+03843:     _connection_event_dispatch(user_data, event)
  __pyx_f_7questdb_7_client__connection_event_dispatch(__pyx_v_user_data, __pyx_v_event);
 03844: 
 03845: 
+03846: class ServerRole(TaggedEnum):
  __Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_TaggedEnum); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3846, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __pyx_t_17 = PyTuple_Pack(1, __pyx_t_25); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3846, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __pyx_t_25 = __Pyx_PEP560_update_bases(__pyx_t_17); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3846, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __pyx_t_20 = __Pyx_CalculateMetaclass(NULL, __pyx_t_25); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3846, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __pyx_t_19 = __Pyx_Py3MetaclassPrepare(__pyx_t_20, __pyx_t_25, __pyx_mstate_global->__pyx_n_u_ServerRole, __pyx_mstate_global->__pyx_n_u_ServerRole, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_Cluster_role_advertised_by_the); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 3846, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (__pyx_t_25 != __pyx_t_17) {
    if (unlikely((PyDict_SetItemString(__pyx_t_19, "__orig_bases__", __pyx_t_17) < 0))) __PYX_ERR(0, 3846, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
/* … */
  __pyx_t_17 = __Pyx_Py3ClassCreate(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ServerRole, __pyx_t_25, __pyx_t_19, NULL, 0, 0); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3846, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ServerRole, __pyx_t_17) < (0)) __PYX_ERR(0, 3846, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 03847:     """
 03848:     Cluster role advertised by the server's ``SERVER_INFO`` handshake.
 03849:     """
+03850:     Standalone = ('standalone', 0)
  if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_Standalone, __pyx_mstate_global->__pyx_tuple[50]) < (0)) __PYX_ERR(0, 3850, __pyx_L1_error)
/* … */
  __pyx_mstate_global->__pyx_tuple[50] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_standalone, __pyx_mstate_global->__pyx_int_0); if (unlikely(!__pyx_mstate_global->__pyx_tuple[50])) __PYX_ERR(0, 3850, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[50]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[50]);
+03851:     Primary = ('primary', 1)
  if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_Primary, __pyx_mstate_global->__pyx_tuple[51]) < (0)) __PYX_ERR(0, 3851, __pyx_L1_error)
/* … */
  __pyx_mstate_global->__pyx_tuple[51] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_primary, __pyx_mstate_global->__pyx_int_1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[51])) __PYX_ERR(0, 3851, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[51]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[51]);
+03852:     Replica = ('replica', 2)
  if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_Replica, __pyx_mstate_global->__pyx_tuple[52]) < (0)) __PYX_ERR(0, 3852, __pyx_L1_error)
/* … */
  __pyx_mstate_global->__pyx_tuple[52] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_replica, __pyx_mstate_global->__pyx_int_2); if (unlikely(!__pyx_mstate_global->__pyx_tuple[52])) __PYX_ERR(0, 3852, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[52]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[52]);
+03853:     PrimaryCatchup = ('primary_catchup', 3)
  if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_PrimaryCatchup, __pyx_mstate_global->__pyx_tuple[53]) < (0)) __PYX_ERR(0, 3853, __pyx_L1_error)
/* … */
  __pyx_mstate_global->__pyx_tuple[53] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_primary_catchup, __pyx_mstate_global->__pyx_int_3); if (unlikely(!__pyx_mstate_global->__pyx_tuple[53])) __PYX_ERR(0, 3853, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[53]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[53]);
 03854:     #: Forward-compat: a role byte this client doesn't recognise. The raw
 03855:     #: byte is available via :attr:`ServerInfo.role_byte`.
+03856:     Other = ('other', 0xFF)
  if (__Pyx_SetNameInClass(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_Other, __pyx_mstate_global->__pyx_tuple[54]) < (0)) __PYX_ERR(0, 3856, __pyx_L1_error)
/* … */
  __pyx_mstate_global->__pyx_tuple[54] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_other, __pyx_mstate_global->__pyx_int_255); if (unlikely(!__pyx_mstate_global->__pyx_tuple[54])) __PYX_ERR(0, 3856, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[54]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[54]);
 03857: 
 03858: 
+03859: @dataclass(frozen=True)
  __pyx_t_19 = NULL;
  __pyx_t_16 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_dataclass); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3859, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_16, NULL};
    __pyx_t_18 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3859, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_18);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_frozen, Py_True, __pyx_t_18, __pyx_callargs+1, 0) < (0)) __PYX_ERR(0, 3859, __pyx_L1_error)
    __pyx_t_17 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_18);
    __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
    __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3859, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
  }
+03860: class ServerInfo:
  __pyx_t_25 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_mstate_global->__pyx_empty_tuple, __pyx_mstate_global->__pyx_n_u_ServerInfo, __pyx_mstate_global->__pyx_n_u_ServerInfo, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_Snapshot_of_the_server_s_SERVER); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3860, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __pyx_t_20 = __Pyx_PyDict_NewPresized(8); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3860, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_role, __pyx_mstate_global->__pyx_n_u_ServerRole) < (0)) __PYX_ERR(0, 3860, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_role_byte, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 3860, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_epoch, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 3860, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_capabilities, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 3860, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_server_wall_ns, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 3860, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_cluster_id, __pyx_mstate_global->__pyx_n_u_str_2) < (0)) __PYX_ERR(0, 3860, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_node_id, __pyx_mstate_global->__pyx_n_u_str_2) < (0)) __PYX_ERR(0, 3860, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_zone_id, __pyx_mstate_global->__pyx_kp_u_Optional_str) < (0)) __PYX_ERR(0, 3860, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_annotations, __pyx_t_20) < (0)) __PYX_ERR(0, 3860, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
/* … */
  __pyx_t_4 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_mstate_global->__pyx_n_u_ServerInfo, __pyx_mstate_global->__pyx_empty_tuple, __pyx_t_25, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3860, __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_19, __pyx_t_4};
    __pyx_t_20 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_17, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
    if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3859, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_20);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ServerInfo, __pyx_t_20) < (0)) __PYX_ERR(0, 3860, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 03861:     """
 03862:     Snapshot of the server's ``SERVER_INFO`` handshake, as advertised on
 03863:     the connection :meth:`QuestDB.server_info` sampled. Fields mirror the
 03864:     Rust reader's ``ServerInfo``.
 03865:     """
 03866:     #: Cluster role; :attr:`ServerRole.Other` for unrecognised role bytes.
 03867:     role: ServerRole
 03868:     #: Raw wire role byte; disambiguates ``role == ServerRole.Other``.
 03869:     role_byte: int
 03870:     #: Monotonic generation counter; increases on failover/role
 03871:     #: transitions, useful for fencing replayed batches.
 03872:     epoch: int
 03873:     #: Bitset of QWP capability flags negotiated with the server.
 03874:     capabilities: int
 03875:     #: Server wall-clock at handshake, nanoseconds since the Unix epoch
 03876:     #: (UTC). Useful for clock-skew detection.
 03877:     server_wall_ns: int
 03878:     cluster_id: str
 03879:     node_id: str
 03880:     #: Zone identifier, present iff the server advertised ``CAP_ZONE`` in
 03881:     #: ``capabilities``; ``None`` otherwise. Compared case-insensitively
 03882:     #: against the client's ``zone=`` connect-string knob during failover.
 03883:     zone_id: Optional[str]
 03884: 
 03885: 
+03886: def _sender_error_from_raw(raw):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_105_sender_error_from_raw(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_105_sender_error_from_raw = {"_sender_error_from_raw", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_105_sender_error_from_raw, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_105_sender_error_from_raw(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_raw = 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("_sender_error_from_raw (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_raw,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(0, 3886, __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(0, 3886, __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, "_sender_error_from_raw", 0) < (0)) __PYX_ERR(0, 3886, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_sender_error_from_raw", 1, 1, 1, i); __PYX_ERR(0, 3886, __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(0, 3886, __pyx_L3_error)
    }
    __pyx_v_raw = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_sender_error_from_raw", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3886, __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._sender_error_from_raw", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_104_sender_error_from_raw(__pyx_self, __pyx_v_raw);
  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_104_sender_error_from_raw(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_raw) {
  PyObject *__pyx_v_category = NULL;
  PyObject *__pyx_v_applied_policy = NULL;
  PyObject *__pyx_v_status = NULL;
  PyObject *__pyx_v_message = NULL;
  PyObject *__pyx_v_message_sequence = NULL;
  PyObject *__pyx_v_from_fsn = NULL;
  PyObject *__pyx_v_to_fsn = NULL;
  PyObject *__pyx_v_py_category = NULL;
  PyObject *__pyx_v_entry = NULL;
  PyObject *__pyx_v_py_policy = 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_5);
  __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._sender_error_from_raw", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_category);
  __Pyx_XDECREF(__pyx_v_applied_policy);
  __Pyx_XDECREF(__pyx_v_status);
  __Pyx_XDECREF(__pyx_v_message);
  __Pyx_XDECREF(__pyx_v_message_sequence);
  __Pyx_XDECREF(__pyx_v_from_fsn);
  __Pyx_XDECREF(__pyx_v_to_fsn);
  __Pyx_XDECREF(__pyx_v_py_category);
  __Pyx_XDECREF(__pyx_v_entry);
  __Pyx_XDECREF(__pyx_v_py_policy);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_105_sender_error_from_raw, 0, __pyx_mstate_global->__pyx_n_u_sender_error_from_raw, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[201])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3886, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_sender_error_from_raw, __pyx_t_25) < (0)) __PYX_ERR(0, 3886, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
+03887:     if raw is None or isinstance(raw, SenderError):
  __pyx_t_2 = (__pyx_v_raw == Py_None);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_SenderError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3887, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_raw, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 3887, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+03888:         return raw
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_raw);
    __pyx_r = __pyx_v_raw;
    goto __pyx_L0;
 03889: 
 03890:     (
+03891:         category,
  __pyx_v_category = __pyx_t_3;
  __pyx_t_3 = 0;
  __pyx_v_applied_policy = __pyx_t_4;
  __pyx_t_4 = 0;
  __pyx_v_status = __pyx_t_5;
  __pyx_t_5 = 0;
  __pyx_v_message = __pyx_t_6;
  __pyx_t_6 = 0;
  __pyx_v_message_sequence = __pyx_t_7;
  __pyx_t_7 = 0;
  __pyx_v_from_fsn = __pyx_t_8;
  __pyx_t_8 = 0;
  __pyx_v_to_fsn = __pyx_t_9;
  __pyx_t_9 = 0;
 03892:         applied_policy,
 03893:         status,
 03894:         message,
 03895:         message_sequence,
 03896:         from_fsn,
 03897:         to_fsn,
+03898:     ) = raw
  if ((likely(PyTuple_CheckExact(__pyx_v_raw))) || (PyList_CheckExact(__pyx_v_raw))) {
    PyObject* sequence = __pyx_v_raw;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 7)) {
      if (size > 7) __Pyx_RaiseTooManyValuesError(7);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 3891, __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_4 = PyTuple_GET_ITEM(sequence, 1);
      __Pyx_INCREF(__pyx_t_4);
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2);
      __Pyx_INCREF(__pyx_t_5);
      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 3);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = PyTuple_GET_ITEM(sequence, 4);
      __Pyx_INCREF(__pyx_t_7);
      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 5);
      __Pyx_INCREF(__pyx_t_8);
      __pyx_t_9 = PyTuple_GET_ITEM(sequence, 6);
      __Pyx_INCREF(__pyx_t_9);
    } else {
      __pyx_t_3 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3891, __pyx_L1_error)
      __Pyx_XGOTREF(__pyx_t_3);
      __pyx_t_4 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3891, __pyx_L1_error)
      __Pyx_XGOTREF(__pyx_t_4);
      __pyx_t_5 = __Pyx_PyList_GetItemRefFast(sequence, 2, __Pyx_ReferenceSharing_SharedReference);
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3891, __pyx_L1_error)
      __Pyx_XGOTREF(__pyx_t_5);
      __pyx_t_6 = __Pyx_PyList_GetItemRefFast(sequence, 3, __Pyx_ReferenceSharing_SharedReference);
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3891, __pyx_L1_error)
      __Pyx_XGOTREF(__pyx_t_6);
      __pyx_t_7 = __Pyx_PyList_GetItemRefFast(sequence, 4, __Pyx_ReferenceSharing_SharedReference);
      if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3891, __pyx_L1_error)
      __Pyx_XGOTREF(__pyx_t_7);
      __pyx_t_8 = __Pyx_PyList_GetItemRefFast(sequence, 5, __Pyx_ReferenceSharing_SharedReference);
      if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3891, __pyx_L1_error)
      __Pyx_XGOTREF(__pyx_t_8);
      __pyx_t_9 = __Pyx_PyList_GetItemRefFast(sequence, 6, __Pyx_ReferenceSharing_SharedReference);
      if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3891, __pyx_L1_error)
      __Pyx_XGOTREF(__pyx_t_9);
    }
    #else
    {
      Py_ssize_t i;
      PyObject** temps[7] = {&__pyx_t_3,&__pyx_t_4,&__pyx_t_5,&__pyx_t_6,&__pyx_t_7,&__pyx_t_8,&__pyx_t_9};
      for (i=0; i < 7; i++) {
        PyObject* item = __Pyx_PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 3891, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[7] = {&__pyx_t_3,&__pyx_t_4,&__pyx_t_5,&__pyx_t_6,&__pyx_t_7,&__pyx_t_8,&__pyx_t_9};
    __pyx_t_10 = PyObject_GetIter(__pyx_v_raw); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3891, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_11 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_10);
    for (index=0; index < 7; index++) {
      PyObject* item = __pyx_t_11(__pyx_t_10); if (unlikely(!item)) goto __pyx_L6_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 7) < (0)) __PYX_ERR(0, 3891, __pyx_L1_error)
    __pyx_t_11 = NULL;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    goto __pyx_L7_unpacking_done;
    __pyx_L6_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_11 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 3891, __pyx_L1_error)
    __pyx_L7_unpacking_done:;
  }
 03899: 
+03900:     py_category = SenderErrorCategory.Unknown
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_SenderErrorCategory); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3900, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_Unknown); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3900, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_v_py_category = __pyx_t_8;
  __pyx_t_8 = 0;
+03901:     for entry in SenderErrorCategory:
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_SenderErrorCategory); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3901, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  if (likely(PyList_CheckExact(__pyx_t_8)) || PyTuple_CheckExact(__pyx_t_8)) {
    __pyx_t_9 = __pyx_t_8; __Pyx_INCREF(__pyx_t_9);
    __pyx_t_12 = 0;
    __pyx_t_13 = NULL;
  } else {
    __pyx_t_12 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3901, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_13 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_9); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3901, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  for (;;) {
    if (likely(!__pyx_t_13)) {
      if (likely(PyList_CheckExact(__pyx_t_9))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_9);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 3901, __pyx_L1_error)
          #endif
          if (__pyx_t_12 >= __pyx_temp) break;
        }
        __pyx_t_8 = __Pyx_PyList_GetItemRefFast(__pyx_t_9, __pyx_t_12, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_12;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_9);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 3901, __pyx_L1_error)
          #endif
          if (__pyx_t_12 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_8 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_12));
        #else
        __pyx_t_8 = __Pyx_PySequence_ITEM(__pyx_t_9, __pyx_t_12);
        #endif
        ++__pyx_t_12;
      }
      if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3901, __pyx_L1_error)
    } else {
      __pyx_t_8 = __pyx_t_13(__pyx_t_9);
      if (unlikely(!__pyx_t_8)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 3901, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_XDECREF_SET(__pyx_v_entry, __pyx_t_8);
    __pyx_t_8 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  goto __pyx_L11_for_end;
  __pyx_L9_break:;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  goto __pyx_L11_for_end;
  __pyx_L11_for_end:;
+03902:         if entry.c_value == category:
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_entry, __pyx_mstate_global->__pyx_n_u_c_value); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3902, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_7 = PyObject_RichCompare(__pyx_t_8, __pyx_v_category, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3902, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3902, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (__pyx_t_1) {
/* … */
    }
+03903:             py_category = entry
      __Pyx_INCREF(__pyx_v_entry);
      __Pyx_DECREF_SET(__pyx_v_py_category, __pyx_v_entry);
+03904:             break
      goto __pyx_L9_break;
 03905: 
+03906:     py_policy = SenderErrorPolicy.Terminal
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_SenderErrorPolicy); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3906, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_Terminal); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3906, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_v_py_policy = __pyx_t_7;
  __pyx_t_7 = 0;
+03907:     for entry in SenderErrorPolicy:
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_SenderErrorPolicy); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3907, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (likely(PyList_CheckExact(__pyx_t_7)) || PyTuple_CheckExact(__pyx_t_7)) {
    __pyx_t_9 = __pyx_t_7; __Pyx_INCREF(__pyx_t_9);
    __pyx_t_12 = 0;
    __pyx_t_13 = NULL;
  } else {
    __pyx_t_12 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3907, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_13 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_9); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3907, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  for (;;) {
    if (likely(!__pyx_t_13)) {
      if (likely(PyList_CheckExact(__pyx_t_9))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_9);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 3907, __pyx_L1_error)
          #endif
          if (__pyx_t_12 >= __pyx_temp) break;
        }
        __pyx_t_7 = __Pyx_PyList_GetItemRefFast(__pyx_t_9, __pyx_t_12, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_12;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_9);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 3907, __pyx_L1_error)
          #endif
          if (__pyx_t_12 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_7 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_12));
        #else
        __pyx_t_7 = __Pyx_PySequence_ITEM(__pyx_t_9, __pyx_t_12);
        #endif
        ++__pyx_t_12;
      }
      if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3907, __pyx_L1_error)
    } else {
      __pyx_t_7 = __pyx_t_13(__pyx_t_9);
      if (unlikely(!__pyx_t_7)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 3907, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_XDECREF_SET(__pyx_v_entry, __pyx_t_7);
    __pyx_t_7 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  goto __pyx_L15_for_end;
  __pyx_L13_break:;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  goto __pyx_L15_for_end;
  __pyx_L15_for_end:;
+03908:         if entry.c_value == applied_policy:
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_entry, __pyx_mstate_global->__pyx_n_u_c_value); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3908, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = PyObject_RichCompare(__pyx_t_7, __pyx_v_applied_policy, Py_EQ); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 3908, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 3908, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (__pyx_t_1) {
/* … */
    }
+03909:             py_policy = entry
      __Pyx_INCREF(__pyx_v_entry);
      __Pyx_DECREF_SET(__pyx_v_py_policy, __pyx_v_entry);
+03910:             break
      goto __pyx_L13_break;
 03911: 
+03912:     return SenderError(
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_8 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_SenderError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3912, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
 03913:         py_category,
 03914:         py_policy,
 03915:         status,
 03916:         message,
 03917:         message_sequence,
 03918:         from_fsn,
+03919:         to_fsn)
  __pyx_t_14 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
    assert(__pyx_t_8);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
    __Pyx_INCREF(__pyx_t_8);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
    __pyx_t_14 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[8] = {__pyx_t_8, __pyx_v_py_category, __pyx_v_py_policy, __pyx_v_status, __pyx_v_message, __pyx_v_message_sequence, __pyx_v_from_fsn, __pyx_v_to_fsn};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_14, (8-__pyx_t_14) | (__pyx_t_14*__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_9)) __PYX_ERR(0, 3912, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  __pyx_r = __pyx_t_9;
  __pyx_t_9 = 0;
  goto __pyx_L0;
 03920: 
 03921: 
+03922: def _default_error_handler(error):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_107_default_error_handler(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_107_default_error_handler = {"_default_error_handler", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_107_default_error_handler, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_107_default_error_handler(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_error = 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("_default_error_handler (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_error,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(0, 3922, __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(0, 3922, __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, "_default_error_handler", 0) < (0)) __PYX_ERR(0, 3922, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_default_error_handler", 1, 1, 1, i); __PYX_ERR(0, 3922, __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(0, 3922, __pyx_L3_error)
    }
    __pyx_v_error = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_default_error_handler", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 3922, __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._default_error_handler", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_106_default_error_handler(__pyx_self, __pyx_v_error);
  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_106_default_error_handler(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_error) {
  PyObject *__pyx_v_level = 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_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __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_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("questdb._client._default_error_handler", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_level);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_107_default_error_handler, 0, __pyx_mstate_global->__pyx_n_u_default_error_handler, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[202])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_default_error_handler, __pyx_t_25) < (0)) __PYX_ERR(0, 3922, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 03923:     level = (
+03924:         logging.ERROR
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3924, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_ERROR); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3924, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_1 = __pyx_t_2;
    __pyx_t_2 = 0;
  } else {
+03925:         if error.applied_policy is SenderErrorPolicy.Terminal
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_mstate_global->__pyx_n_u_applied_policy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3925, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_SenderErrorPolicy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3925, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Terminal); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3925, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = (__pyx_t_2 == __pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__pyx_t_5) {
+03926:         else logging.WARNING)
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3926, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_WARNING); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3926, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_1 = __pyx_t_4;
    __pyx_t_4 = 0;
  }
  __pyx_v_level = __pyx_t_1;
  __pyx_t_1 = 0;
+03927:     logging.getLogger("questdb").log(
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3927, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_getLogger); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3927, __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_7))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_7);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
    __pyx_t_8 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_n_u_questdb};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3927, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_t_4 = __pyx_t_2;
  __Pyx_INCREF(__pyx_t_4);
 03928:         level,
 03929:         "QWP/WebSocket server rejection: "
 03930:         "category=%s policy=%s status=%s fsn=[%s,%s] seq=%s message=%s",
+03931:         error.category.tag,
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_mstate_global->__pyx_n_u_category); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3931, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_tag); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3931, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+03932:         error.applied_policy.tag,
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_mstate_global->__pyx_n_u_applied_policy); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3932, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_tag); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3932, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+03933:         error.status,
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_mstate_global->__pyx_n_u_status); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3933, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
+03934:         error.from_fsn,
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_mstate_global->__pyx_n_u_from_fsn); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3934, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
+03935:         error.to_fsn,
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_mstate_global->__pyx_n_u_to_fsn); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3935, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
+03936:         error.message_sequence,
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_mstate_global->__pyx_n_u_message_sequence); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3936, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
+03937:         error.message)
  __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_mstate_global->__pyx_n_u_message); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3937, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_8 = 0;
  {
    PyObject *__pyx_callargs[10] = {__pyx_t_4, __pyx_v_level, __pyx_mstate_global->__pyx_kp_u_QWP_WebSocket_server_rejection_c, __pyx_t_3, __pyx_t_6, __pyx_t_7, __pyx_t_9, __pyx_t_10, __pyx_t_11, __pyx_t_12};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_log, __pyx_callargs+__pyx_t_8, (10-__pyx_t_8) | (1*__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_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__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;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3927, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 03938: 
 03939: 
+03940: cdef void _sender_error_dispatch(
static void __pyx_f_7questdb_7_client__sender_error_dispatch(void *__pyx_v_user_data, struct line_sender_qwpws_error_view const *__pyx_v_view) {
  struct __pyx_obj_7questdb_7_client__DispatchContext *__pyx_v_context = 0;
  int __pyx_v_entered;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
/* … */
  /* function exit code */
  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);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_WriteUnraisable("questdb._client._sender_error_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_context);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
}
 03941:         void* user_data,
 03942:         const line_sender_qwpws_error_view* view) noexcept with gil:
+03943:     cdef _DispatchContext context = <_DispatchContext>user_data
  __pyx_t_1 = ((PyObject *)__pyx_v_user_data);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_context = ((struct __pyx_obj_7questdb_7_client__DispatchContext *)__pyx_t_1);
  __pyx_t_1 = 0;
+03944:     cdef bint entered = False
  __pyx_v_entered = 0;
+03945:     try:
  /*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_L11_try_end;
      __pyx_L6_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 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_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
      __pyx_L8_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_L4_error;
      __pyx_L7_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_L11_try_end:;
    }
  }
+03946:         _enter_dispatch(context.owner_token)
        __pyx_t_1 = __pyx_v_context->owner_token;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_f_7questdb_7_client__enter_dispatch(__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3946, __pyx_L6_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+03947:         entered = True
        __pyx_v_entered = 1;
+03948:         context.error_handler(_sender_error_from_raw(
        __pyx_t_5 = NULL;
        __Pyx_INCREF(__pyx_v_context->error_handler);
        __pyx_t_6 = __pyx_v_context->error_handler; 
        __pyx_t_8 = NULL;
        __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_sender_error_from_raw); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3948, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_9);
+03949:             c_sender_error_view_to_raw(view[0])))
        __pyx_t_10 = __pyx_f_7questdb_7_client_c_sender_error_view_to_raw((__pyx_v_view[0])); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3949, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_11 = 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_11 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_10};
          __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__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_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 3948, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_7);
        }
        __pyx_t_11 = 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_11 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_7};
          __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__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_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3948, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_1);
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+03950:     except BaseException:
      __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
      if (__pyx_t_12) {
        __Pyx_AddTraceback("questdb._client._sender_error_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(0, 3950, __pyx_L8_except_error)
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_7);
+03951:         logging.getLogger("questdb").exception(
        __pyx_t_8 = NULL;
        __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 3951, __pyx_L8_except_error)
        __Pyx_GOTREF(__pyx_t_13);
        __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_getLogger); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 3951, __pyx_L8_except_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __pyx_t_11 = 1;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_14))) {
          __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_14);
          assert(__pyx_t_8);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_14);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_14, __pyx__function);
          __pyx_t_11 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_mstate_global->__pyx_n_u_questdb};
          __pyx_t_10 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_14, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3951, __pyx_L8_except_error)
          __Pyx_GOTREF(__pyx_t_10);
        }
        __pyx_t_9 = __pyx_t_10;
        __Pyx_INCREF(__pyx_t_9);
        __pyx_t_11 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_mstate_global->__pyx_kp_u_QWP_WebSocket_error_handler_fail};
          __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_exception, __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_5)) __PYX_ERR(0, 3951, __pyx_L8_except_error)
          __Pyx_GOTREF(__pyx_t_5);
        }
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 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;
        goto __pyx_L7_exception_handled;
      }
      goto __pyx_L8_except_error;
 03952:             "QWP/WebSocket error handler failed")
 03953:     finally:
+03954:         if entered:
  /*finally:*/ {
    /*normal exit:*/{
      if (__pyx_v_entered) {
/* … */
      }
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_4 = 0; __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 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_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
      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_17);
      __Pyx_XGOTREF(__pyx_t_18);
      __Pyx_XGOTREF(__pyx_t_19);
      __pyx_t_12 = __pyx_lineno; __pyx_t_15 = __pyx_clineno; __pyx_t_16 = __pyx_filename;
      {
        if (__pyx_v_entered) {
/* … */
        }
      }
      __Pyx_XGIVEREF(__pyx_t_17);
      __Pyx_XGIVEREF(__pyx_t_18);
      __Pyx_XGIVEREF(__pyx_t_19);
      __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
      __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_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
      __pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_15; __pyx_filename = __pyx_t_16;
      goto __pyx_L1_error;
      __pyx_L16_error:;
      __Pyx_XGIVEREF(__pyx_t_17);
      __Pyx_XGIVEREF(__pyx_t_18);
      __Pyx_XGIVEREF(__pyx_t_19);
      __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
      __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_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }
+03955:             _exit_dispatch(context.owner_token)
        __pyx_t_7 = __pyx_v_context->owner_token;
        __Pyx_INCREF(__pyx_t_7);
        __pyx_f_7questdb_7_client__exit_dispatch(__pyx_t_7); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3955, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
          __pyx_t_7 = __pyx_v_context->owner_token;
          __Pyx_INCREF(__pyx_t_7);
          __pyx_f_7questdb_7_client__exit_dispatch(__pyx_t_7); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3955, __pyx_L16_error)
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 03956: 
 03957: 
+03958: cdef void _sender_error_trampoline(
static void __pyx_f_7questdb_7_client__sender_error_trampoline(void *__pyx_v_user_data, struct line_sender_qwpws_error_view const *__pyx_v_view) {
/* … */
  /* function exit code */
  __pyx_L0:;
}
 03959:         void* user_data,
 03960:         const line_sender_qwpws_error_view* view) noexcept nogil:
 03961:     # No object locals here: the finalizing early return must not touch
 03962:     # the GIL, which a Cython epilogue with object cleanup would.
+03963:     if qdb_py_is_finalizing():
  __pyx_t_1 = qdb_py_is_finalizing();
  if (__pyx_t_1) {
/* … */
  }
+03964:         return
    goto __pyx_L0;
+03965:     _sender_error_dispatch(user_data, view)
  __pyx_f_7questdb_7_client__sender_error_dispatch(__pyx_v_user_data, __pyx_v_view);
 03966: 
 03967: 
+03968: class TlsCa(TaggedEnum):
  __Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_TaggedEnum); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3968, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __pyx_t_20 = PyTuple_Pack(1, __pyx_t_25); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3968, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __pyx_t_25 = __Pyx_PEP560_update_bases(__pyx_t_20); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 3968, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __pyx_t_17 = __Pyx_CalculateMetaclass(NULL, __pyx_t_25); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 3968, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_17, __pyx_t_25, __pyx_mstate_global->__pyx_n_u_TlsCa, __pyx_mstate_global->__pyx_n_u_TlsCa, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_Verification_mechanism_for_the); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3968, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__pyx_t_25 != __pyx_t_20) {
    if (unlikely((PyDict_SetItemString(__pyx_t_4, "__orig_bases__", __pyx_t_20) < 0))) __PYX_ERR(0, 3968, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
/* … */
  __pyx_t_20 = __Pyx_Py3ClassCreate(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_TlsCa, __pyx_t_25, __pyx_t_4, NULL, 0, 0); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3968, __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 (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_TlsCa, __pyx_t_20) < (0)) __PYX_ERR(0, 3968, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 03969:     """
 03970:     Verification mechanism for the server's certificate.
 03971: 
 03972:     Here ``webpki`` refers to the
 03973:     `WebPKI library <https://github.com/rustls/webpki-roots>`_ and
 03974:     ``os`` refers to the operating system's certificate store.
 03975: 
 03976:     See :ref:`sender_conf_tls` for more information.
 03977:     """
+03978:     WebpkiRoots = ('webpki_roots', line_sender_ca_webpki_roots)
  __pyx_t_20 = __Pyx_PyLong_From_enum__line_sender_ca(line_sender_ca_webpki_roots); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3978, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __pyx_t_19 = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_webpki_roots, __pyx_t_20); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 3978, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_WebpkiRoots, __pyx_t_19) < (0)) __PYX_ERR(0, 3978, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+03979:     OsRoots = ('os_roots', line_sender_ca_os_roots)
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_ca(line_sender_ca_os_roots); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 3979, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __pyx_t_20 = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_os_roots, __pyx_t_19); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3979, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_OsRoots, __pyx_t_20) < (0)) __PYX_ERR(0, 3979, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+03980:     WebpkiAndOsRoots = ('webpki_and_os_roots', line_sender_ca_webpki_and_os_roots)
  __pyx_t_20 = __Pyx_PyLong_From_enum__line_sender_ca(line_sender_ca_webpki_and_os_roots); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __pyx_t_19 = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_webpki_and_os_roots, __pyx_t_20); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 3980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_WebpkiAndOsRoots, __pyx_t_19) < (0)) __PYX_ERR(0, 3980, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+03981:     PemFile = ('pem_file', line_sender_ca_pem_file)
  __pyx_t_19 = __Pyx_PyLong_From_enum__line_sender_ca(line_sender_ca_pem_file); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 3981, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __pyx_t_20 = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_pem_file, __pyx_t_19); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 3981, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_PemFile, __pyx_t_20) < (0)) __PYX_ERR(0, 3981, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
 03982: 
 03983: 
+03984: cdef object c_parse_conf_err_to_py(questdb_conf_str_parse_err* err):
static PyObject *__pyx_f_7questdb_7_client_c_parse_conf_err_to_py(struct questdb_conf_str_parse_err *__pyx_v_err) {
  PyObject *__pyx_v_msg = 0;
  PyObject *__pyx_v_py_err = 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_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb._client.c_parse_conf_err_to_py", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_msg);
  __Pyx_XDECREF(__pyx_v_py_err);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+03985:     cdef str msg = PyUnicode_FromStringAndSize(
  __pyx_t_1 = PyUnicode_FromStringAndSize(__pyx_v_err->msg, ((Py_ssize_t)__pyx_v_err->msg_len)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3985, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_msg = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 03986:         err.msg, <Py_ssize_t>err.msg_len)
+03987:     cdef object py_err = QuestDBError(QuestDBErrorCode.ConfigError, msg)
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3987, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3987, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3987, __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_v_msg};
    __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(0, 3987, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_py_err = __pyx_t_1;
  __pyx_t_1 = 0;
+03988:     questdb_conf_str_parse_err_free(err)
  questdb_conf_str_parse_err_free(__pyx_v_err);
+03989:     return py_err
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_py_err);
  __pyx_r = __pyx_v_py_err;
  goto __pyx_L0;
 03990: 
 03991: 
+03992: cdef object parse_conf_str(
static PyObject *__pyx_f_7questdb_7_client_parse_conf_str(struct qdb_pystr_buf *__pyx_v_b, PyObject *__pyx_v_conf_str) {
  size_t __pyx_v_c_len1;
  char const *__pyx_v_c_buf1;
  size_t __pyx_v_c_len2;
  char const *__pyx_v_c_buf2;
  PyObject *__pyx_v_service = 0;
  struct questdb_conf_str_iter *__pyx_v_c_iter;
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_v_value = 0;
  PyObject *__pyx_v_params = 0;
  struct line_sender_utf8 __pyx_v_c_conf_str_utf8;
  struct questdb_conf_str_parse_err *__pyx_v_err;
  struct questdb_conf_str *__pyx_v_c_conf_str;
  PyObject *__pyx_v_type_mappings = NULL;
  PyObject *__pyx_v_typed_params = NULL;
  PyObject *__pyx_v_converter = NULL;
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_XDECREF(__pyx_t_21);
  __Pyx_XDECREF(__pyx_t_22);
  __Pyx_XDECREF(__pyx_t_23);
  __Pyx_XDECREF(__pyx_t_24);
  __Pyx_XDECREF(__pyx_t_26);
  __Pyx_AddTraceback("questdb._client.parse_conf_str", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_service);
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XDECREF(__pyx_v_value);
  __Pyx_XDECREF(__pyx_v_params);
  __Pyx_XDECREF(__pyx_v_type_mappings);
  __Pyx_XDECREF(__pyx_v_typed_params);
  __Pyx_XDECREF(__pyx_v_converter);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 03993:         qdb_pystr_buf* b,
 03994:         str conf_str):
 03995:     """
 03996:     Parse a config string to a tuple of (Protocol, dict[str, str]).
 03997:     """
 03998:     cdef size_t c_len1
 03999:     cdef const char* c_buf1
 04000:     cdef size_t c_len2
 04001:     cdef const char* c_buf2
 04002:     cdef str service
 04003:     cdef questdb_conf_str_iter* c_iter
 04004:     cdef str key
 04005:     cdef str value
+04006:     cdef dict params = {}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4006, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_params = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 04007:     cdef line_sender_utf8 c_conf_str_utf8
 04008:     cdef questdb_conf_str_parse_err* err
 04009:     cdef questdb_conf_str* c_conf_str
+04010:     str_to_utf8(b, <PyObject*>conf_str, &c_conf_str_utf8)
  __pyx_t_2 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_conf_str), (&__pyx_v_c_conf_str_utf8)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 4010, __pyx_L1_error)
+04011:     c_conf_str = questdb_conf_str_parse(
  __pyx_v_c_conf_str = questdb_conf_str_parse(__pyx_v_c_conf_str_utf8.buf, __pyx_v_c_conf_str_utf8.len, (&__pyx_v_err));
 04012:         c_conf_str_utf8.buf,
 04013:         c_conf_str_utf8.len,
 04014:         &err)
+04015:     if c_conf_str == NULL:
  __pyx_t_3 = (__pyx_v_c_conf_str == NULL);
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+04016:         raise c_parse_conf_err_to_py(err)
    __pyx_t_1 = __pyx_f_7questdb_7_client_c_parse_conf_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4016, __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(0, 4016, __pyx_L1_error)
 04017: 
+04018:     c_iter = NULL
  __pyx_v_c_iter = NULL;
+04019:     try:
  /*try:*/ {
+04020:         c_buf1 = questdb_conf_str_service(c_conf_str, &c_len1)
    __pyx_v_c_buf1 = questdb_conf_str_service(__pyx_v_c_conf_str, (&__pyx_v_c_len1));
+04021:         service = PyUnicode_FromStringAndSize(c_buf1, <Py_ssize_t>c_len1)
    __pyx_t_1 = PyUnicode_FromStringAndSize(__pyx_v_c_buf1, ((Py_ssize_t)__pyx_v_c_len1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4021, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_service = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
 04022: 
+04023:         c_iter = questdb_conf_str_iter_pairs(c_conf_str)
    __pyx_v_c_iter = questdb_conf_str_iter_pairs(__pyx_v_c_conf_str);
+04024:         while questdb_conf_str_iter_next(c_iter, &c_buf1, &c_len1, &c_buf2, &c_len2):
    while (1) {
      __pyx_t_3 = questdb_conf_str_iter_next(__pyx_v_c_iter, (&__pyx_v_c_buf1), (&__pyx_v_c_len1), (&__pyx_v_c_buf2), (&__pyx_v_c_len2));
      if (!__pyx_t_3) break;
+04025:             key = PyUnicode_FromStringAndSize(c_buf1, <Py_ssize_t>c_len1)
      __pyx_t_1 = PyUnicode_FromStringAndSize(__pyx_v_c_buf1, ((Py_ssize_t)__pyx_v_c_len1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4025, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_key, ((PyObject*)__pyx_t_1));
      __pyx_t_1 = 0;
+04026:             value = PyUnicode_FromStringAndSize(c_buf2, <Py_ssize_t>c_len2)
      __pyx_t_1 = PyUnicode_FromStringAndSize(__pyx_v_c_buf2, ((Py_ssize_t)__pyx_v_c_len2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4026, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_value, ((PyObject*)__pyx_t_1));
      __pyx_t_1 = 0;
+04027:             params[key] = value
      if (unlikely((PyDict_SetItem(__pyx_v_params, __pyx_v_key, __pyx_v_value) < 0))) __PYX_ERR(0, 4027, __pyx_L5_error)
    }
  }
 04028:     finally:
+04029:         if c_iter != NULL:
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_3 = (__pyx_v_c_iter != NULL);
      if (__pyx_t_3) {
/* … */
      }
/* … */
        __pyx_t_3 = (__pyx_v_c_iter != NULL);
        if (__pyx_t_3) {
/* … */
        }
+04030:             questdb_conf_str_iter_free(c_iter)
        questdb_conf_str_iter_free(__pyx_v_c_iter);
/* … */
          questdb_conf_str_iter_free(__pyx_v_c_iter);
+04031:         questdb_conf_str_free(c_conf_str)
      questdb_conf_str_free(__pyx_v_c_conf_str);
      goto __pyx_L6;
    }
    __pyx_L5_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
      if ( unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
      {
/* … */
        questdb_conf_str_free(__pyx_v_c_conf_str);
      }
      __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);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
      __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
      __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6;
      goto __pyx_L1_error;
    }
    __pyx_L6:;
  }
 04032: 
 04033:     # We now need to parse the various values in the dict from their
 04034:     # string values to their Python types, as expected by the overrides
 04035:     # API of Sender.from_conf and Sender.from_env.
 04036:     # Note that some of these values, such as `tls_ca` or `auto_flush`
 04037:     # are kept as strings and are parsed by Sender._set_sender_fields.
 04038:     type_mappings = {
+04039:         'bind_interface': str,
  __pyx_t_1 = __Pyx_PyDict_NewPresized(25); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4039, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_bind_interface, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04040:         'max_datagram_size': int,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_max_datagram_size, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04041:         'multicast_ttl': int,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_multicast_ttl, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04042:         'username': str,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_username, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04043:         'password': str,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_password, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04044:         'token': str,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_token, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04045:         'token_x': str,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_token_x, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04046:         'token_y': str,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_token_y, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04047:         'auth_timeout': int,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auth_timeout, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04048:         'tls_verify': str,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_tls_verify, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04049:         'tls_ca': str,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_tls_ca, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04050:         'tls_roots': str,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_tls_roots, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04051:         'tls_roots_password': str,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_tls_roots_password, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04052:         'max_buf_size': int,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_max_buf_size, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04053:         'retry_timeout': int,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_retry_timeout, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04054:         'retry_max_backoff_millis': int,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_retry_max_backoff_millis, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04055:         'request_min_throughput': int,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_request_min_throughput, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04056:         'request_timeout': int,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_request_timeout, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04057:         'auto_flush': str,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04058:         'auto_flush_rows': str,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_rows, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04059:         'auto_flush_bytes': str,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04060:         'auto_flush_interval': str,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_interval, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04061:         'init_buf_size': int,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_init_buf_size, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04062:         'max_name_len': int,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_max_name_len, ((PyObject *)(&PyLong_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
+04063:         'qwp_ws_progress': str,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_qwp_ws_progress, ((PyObject *)(&PyUnicode_Type))) < (0)) __PYX_ERR(0, 4039, __pyx_L1_error)
  __pyx_v_type_mappings = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 04064:     }
+04065:     typed_params = {}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4065, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_typed_params = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+04066:     for key, value in params.items():
  __pyx_t_13 = 0;
  __pyx_t_15 = __Pyx_dict_iterator(__pyx_v_params, 1, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_14), (&__pyx_t_5)); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4066, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_15;
  __pyx_t_15 = 0;
  while (1) {
    __pyx_t_4 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_14, &__pyx_t_13, &__pyx_t_15, &__pyx_t_16, NULL, __pyx_t_5);
    if (unlikely(__pyx_t_4 == 0)) break;
    if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 4066, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __Pyx_GOTREF(__pyx_t_16);
    if (!(likely(PyUnicode_CheckExact(__pyx_t_15))||((__pyx_t_15) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_15))) __PYX_ERR(0, 4066, __pyx_L1_error)
    if (!(likely(PyUnicode_CheckExact(__pyx_t_16))||((__pyx_t_16) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_16))) __PYX_ERR(0, 4066, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_key, ((PyObject*)__pyx_t_15));
    __pyx_t_15 = 0;
    __Pyx_XDECREF_SET(__pyx_v_value, ((PyObject*)__pyx_t_16));
    __pyx_t_16 = 0;
+04067:         converter = type_mappings.get(key, str)
    __pyx_t_16 = __Pyx_PyDict_GetItemDefault(__pyx_v_type_mappings, __pyx_v_key, ((PyObject *)(&PyUnicode_Type))); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4067, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
    __Pyx_XDECREF_SET(__pyx_v_converter, __pyx_t_16);
    __pyx_t_16 = 0;
+04068:         try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      goto __pyx_L22_try_end;
      __pyx_L15_error:;
      __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;
/* … */
      __pyx_L17_except_error:;
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_11, __pyx_t_10);
      goto __pyx_L1_error;
      __pyx_L22_try_end:;
    }
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+04069:             typed_params[key] = converter(value)
        __pyx_t_15 = NULL;
        __Pyx_INCREF(__pyx_v_converter);
        __pyx_t_17 = __pyx_v_converter; 
        __pyx_t_18 = 1;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_17))) {
          __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_17);
          assert(__pyx_t_15);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_17);
          __Pyx_INCREF(__pyx_t_15);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_17, __pyx__function);
          __pyx_t_18 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_15, __pyx_v_value};
          __pyx_t_16 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_17, __pyx_callargs+__pyx_t_18, (2-__pyx_t_18) | (__pyx_t_18*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4069, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_16);
        }
        if (unlikely((PyDict_SetItem(__pyx_v_typed_params, __pyx_v_key, __pyx_t_16) < 0))) __PYX_ERR(0, 4069, __pyx_L15_error)
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+04070:         except (ValueError, TypeError) as e:
      __pyx_t_4 = __Pyx_PyErr_ExceptionMatches2(((PyObject *)(((PyTypeObject*)PyExc_ValueError))), ((PyObject *)(((PyTypeObject*)PyExc_TypeError))));
      if (__pyx_t_4) {
        __Pyx_AddTraceback("questdb._client.parse_conf_str", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_16, &__pyx_t_17, &__pyx_t_15) < 0) __PYX_ERR(0, 4070, __pyx_L17_except_error)
        __Pyx_XGOTREF(__pyx_t_16);
        __Pyx_XGOTREF(__pyx_t_17);
        __Pyx_XGOTREF(__pyx_t_15);
        __Pyx_INCREF(__pyx_t_17);
        __pyx_v_e = __pyx_t_17;
        /*try:*/ {
/* … */
        /*finally:*/ {
          __pyx_L28_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_declare
            __Pyx_PyThreadState_assign
            __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0; __pyx_t_31 = 0;
            __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
            __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
            __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
            __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
            __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
            __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
            __Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
             __Pyx_ExceptionSwap(&__pyx_t_29, &__pyx_t_30, &__pyx_t_31);
            if ( unlikely(__Pyx_GetException(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7) < 0)) __Pyx_ErrFetch(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7);
            __Pyx_XGOTREF(__pyx_t_9);
            __Pyx_XGOTREF(__pyx_t_8);
            __Pyx_XGOTREF(__pyx_t_7);
            __Pyx_XGOTREF(__pyx_t_29);
            __Pyx_XGOTREF(__pyx_t_30);
            __Pyx_XGOTREF(__pyx_t_31);
            __pyx_t_4 = __pyx_lineno; __pyx_t_27 = __pyx_clineno; __pyx_t_28 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_e); __pyx_v_e = 0;
            }
            __Pyx_XGIVEREF(__pyx_t_29);
            __Pyx_XGIVEREF(__pyx_t_30);
            __Pyx_XGIVEREF(__pyx_t_31);
            __Pyx_ExceptionReset(__pyx_t_29, __pyx_t_30, __pyx_t_31);
            __Pyx_XGIVEREF(__pyx_t_9);
            __Pyx_XGIVEREF(__pyx_t_8);
            __Pyx_XGIVEREF(__pyx_t_7);
            __Pyx_ErrRestore(__pyx_t_9, __pyx_t_8, __pyx_t_7);
            __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0; __pyx_t_31 = 0;
            __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_27; __pyx_filename = __pyx_t_28;
            goto __pyx_L17_except_error;
          }
        }
      }
      goto __pyx_L17_except_error;
+04071:             raise QuestDBError(
          __pyx_t_20 = NULL;
          __Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 4071, __pyx_L28_error)
          __Pyx_GOTREF(__pyx_t_21);
+04072:                 QuestDBErrorCode.ConfigError,
          __Pyx_GetModuleGlobalName(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 4072, __pyx_L28_error)
          __Pyx_GOTREF(__pyx_t_22);
          __pyx_t_23 = __Pyx_PyObject_GetAttrStr(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 4072, __pyx_L28_error)
          __Pyx_GOTREF(__pyx_t_23);
          __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
+04073:                 f'Invalid value for config key {key!r}: {value!r}') from e
          __pyx_t_22 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_key), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 4073, __pyx_L28_error)
          __Pyx_GOTREF(__pyx_t_22);
          __pyx_t_24 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_value), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 4073, __pyx_L28_error)
          __Pyx_GOTREF(__pyx_t_24);
          __pyx_t_25[0] = __pyx_mstate_global->__pyx_kp_u_Invalid_value_for_config_key;
          __pyx_t_25[1] = __pyx_t_22;
          __pyx_t_25[2] = __pyx_mstate_global->__pyx_kp_u_;
          __pyx_t_25[3] = __pyx_t_24;
          __pyx_t_26 = __Pyx_PyUnicode_Join(__pyx_t_25, 4, 29 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_22) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_24), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_22) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_24));
          if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 4073, __pyx_L28_error)
          __Pyx_GOTREF(__pyx_t_26);
          __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
          __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
          __pyx_t_18 = 1;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(PyMethod_Check(__pyx_t_21))) {
            __pyx_t_20 = PyMethod_GET_SELF(__pyx_t_21);
            assert(__pyx_t_20);
            PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_21);
            __Pyx_INCREF(__pyx_t_20);
            __Pyx_INCREF(__pyx__function);
            __Pyx_DECREF_SET(__pyx_t_21, __pyx__function);
            __pyx_t_18 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_20, __pyx_t_23, __pyx_t_26};
            __pyx_t_19 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_21, __pyx_callargs+__pyx_t_18, (3-__pyx_t_18) | (__pyx_t_18*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
            __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
            __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
            __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
            if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4071, __pyx_L28_error)
            __Pyx_GOTREF(__pyx_t_19);
          }
          __Pyx_Raise(__pyx_t_19, 0, 0, __pyx_v_e);
          __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
          __PYX_ERR(0, 4071, __pyx_L28_error)
        }
+04074:     if service == 'udps':
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_v_service, __pyx_mstate_global->__pyx_n_u_udps, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 4074, __pyx_L1_error)
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+04075:         raise QuestDBError(
    __pyx_t_15 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4075, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
+04076:             QuestDBErrorCode.ConfigError,
    __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4076, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
    __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4076, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_19);
    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
    __pyx_t_18 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_17))) {
      __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_17);
      assert(__pyx_t_15);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_17);
      __Pyx_INCREF(__pyx_t_15);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_17, __pyx__function);
      __pyx_t_18 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_15, __pyx_t_19, __pyx_mstate_global->__pyx_kp_u_TLS_is_not_supported_for_UDP};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_17, __pyx_callargs+__pyx_t_18, (3-__pyx_t_18) | (__pyx_t_18*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
      __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4075, __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(0, 4075, __pyx_L1_error)
 04077:             'TLS is not supported for UDP.')
+04078:     return (Protocol.parse(service), typed_params)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_17 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_Protocol); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4078, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_parse); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4078, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  __pyx_t_18 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_15))) {
    __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_15);
    assert(__pyx_t_17);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_15);
    __Pyx_INCREF(__pyx_t_17);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_15, __pyx__function);
    __pyx_t_18 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_17, __pyx_v_service};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_15, __pyx_callargs+__pyx_t_18, (2-__pyx_t_18) | (__pyx_t_18*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4078, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4078, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_GIVEREF(__pyx_t_1);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_1) != (0)) __PYX_ERR(0, 4078, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_typed_params);
  __Pyx_GIVEREF(__pyx_v_typed_params);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_v_typed_params) != (0)) __PYX_ERR(0, 4078, __pyx_L1_error);
  __pyx_t_1 = 0;
  __pyx_r = __pyx_t_15;
  __pyx_t_15 = 0;
  goto __pyx_L0;
 04079: 
 04080: 
+04081: cdef str conf_str_value(object value):
static PyObject *__pyx_f_7questdb_7_client_conf_str_value(PyObject *__pyx_v_value) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client.conf_str_value", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+04082:     return str(value).replace(';', ';;')
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_Unicode(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4082, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyUnicode_Replace(((PyObject*)__pyx_t_1), __pyx_mstate_global->__pyx_kp_u__29, __pyx_mstate_global->__pyx_kp_u__30, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4082, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;
 04083: 
 04084: 
+04085: cdef bint _dataframe_columnar_has_single_logical_chunk(
static int __pyx_f_7questdb_7_client__dataframe_columnar_has_single_logical_chunk(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 04086:         col_t* col,
 04087:         size_t row_count) noexcept nogil:
+04088:     if col.setup.chunks.n_chunks != 1:
  __pyx_t_1 = (__pyx_v_col->setup->chunks.n_chunks != 1);
  if (__pyx_t_1) {
/* … */
  }
+04089:         return False
    __pyx_r = 0;
    goto __pyx_L0;
+04090:     if col.setup.chunks.chunks == NULL:
  __pyx_t_1 = (__pyx_v_col->setup->chunks.chunks == NULL);
  if (__pyx_t_1) {
/* … */
  }
+04091:         return False
    __pyx_r = 0;
    goto __pyx_L0;
+04092:     return col.setup.chunks.chunks[0].length == <int64_t>row_count
  __pyx_r = ((__pyx_v_col->setup->chunks.chunks[0]).length == ((int64_t)__pyx_v_row_count));
  goto __pyx_L0;
 04093: 
 04094: 
+04095: cdef bint _dataframe_columnar_has_single_contiguous_chunk(
static int __pyx_f_7questdb_7_client__dataframe_columnar_has_single_contiguous_chunk(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count) {
  struct ArrowArray *__pyx_v_arr;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 04096:         col_t* col,
 04097:         size_t row_count) noexcept nogil:
 04098:     cdef ArrowArray* arr
+04099:     if not _dataframe_columnar_has_single_logical_chunk(col, row_count):
  __pyx_t_1 = (!__pyx_f_7questdb_7_client__dataframe_columnar_has_single_logical_chunk(__pyx_v_col, __pyx_v_row_count));
  if (__pyx_t_1) {
/* … */
  }
+04100:         return False
    __pyx_r = 0;
    goto __pyx_L0;
+04101:     arr = &col.setup.chunks.chunks[0]
  __pyx_v_arr = (&(__pyx_v_col->setup->chunks.chunks[0]));
 04102:     # pyarrow allocates exactly `n_buffers` pointers, so `buffers[1]` is
 04103:     # past the allocation for a struct array (1) or a null array (0).
 04104:     return (
+04105:         arr.offset == 0 and
  __pyx_t_2 = (__pyx_v_arr->offset == 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
+04106:         arr.n_buffers >= 2 and
  __pyx_t_2 = (__pyx_v_arr->n_buffers >= 2);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
+04107:         arr.buffers != NULL and
  __pyx_t_2 = (__pyx_v_arr->buffers != NULL);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
+04108:         arr.buffers[1] != NULL)
  __pyx_t_2 = ((__pyx_v_arr->buffers[1]) != NULL);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 04109: 
 04110: 
+04111: cdef bint _dataframe_columnar_i64_has_nat(
static int __pyx_f_7questdb_7_client__dataframe_columnar_i64_has_nat(int64_t const *__pyx_v_data, size_t __pyx_v_row_count) {
  size_t __pyx_v_row_index;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 04112:         const int64_t* data,
 04113:         size_t row_count) noexcept nogil:
 04114:     cdef size_t row_index
+04115:     for row_index in range(row_count):
  __pyx_t_1 = __pyx_v_row_count;
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_row_index = __pyx_t_3;
+04116:         if data[row_index] == _NAT:
    __pyx_t_4 = ((__pyx_v_data[__pyx_v_row_index]) == __pyx_v_7questdb_7_client__NAT);
    if (__pyx_t_4) {
/* … */
    }
  }
+04117:             return True
      __pyx_r = 1;
      goto __pyx_L0;
+04118:     return False
  __pyx_r = 0;
  goto __pyx_L0;
 04119: 
 04120: 
+04121: cdef bint _dataframe_columnar_col_has_nat(
static int __pyx_f_7questdb_7_client__dataframe_columnar_col_has_nat(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 04122:         col_t* col,
 04123:         size_t row_count) noexcept nogil:
+04124:     if not col.setup.nat_scan_done:
  __pyx_t_1 = (!__pyx_v_col->setup->nat_scan_done);
  if (__pyx_t_1) {
/* … */
  }
+04125:         col.setup.nat_found = _dataframe_columnar_i64_has_nat(
    __pyx_v_col->setup->nat_found = __pyx_f_7questdb_7_client__dataframe_columnar_i64_has_nat(((int64_t const *)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1])), __pyx_v_row_count);
 04126:             <const int64_t*>col.setup.chunks.chunks[0].buffers[1],
 04127:             row_count)
+04128:         col.setup.nat_scan_done = True
    __pyx_v_col->setup->nat_scan_done = 1;
+04129:     return col.setup.nat_found
  __pyx_r = __pyx_v_col->setup->nat_found;
  goto __pyx_L0;
 04130: 
 04131: 
+04132: cdef bint _dataframe_columnar_i64_has_negative(
static int __pyx_f_7questdb_7_client__dataframe_columnar_i64_has_negative(int64_t const *__pyx_v_data, size_t __pyx_v_row_count) {
  size_t __pyx_v_row_index;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 04133:         const int64_t* data,
 04134:         size_t row_count) noexcept nogil:
 04135:     cdef size_t row_index
+04136:     for row_index in range(row_count):
  __pyx_t_1 = __pyx_v_row_count;
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_row_index = __pyx_t_3;
+04137:         if data[row_index] < 0:
    __pyx_t_4 = ((__pyx_v_data[__pyx_v_row_index]) < 0);
    if (__pyx_t_4) {
/* … */
    }
  }
+04138:             return True
      __pyx_r = 1;
      goto __pyx_L0;
+04139:     return False
  __pyx_r = 0;
  goto __pyx_L0;
 04140: 
 04141: 
+04142: cdef const qwp_validity* _dataframe_columnar_validity(
static struct qwp_validity const *__pyx_f_7questdb_7_client__dataframe_columnar_validity(struct ArrowArray *__pyx_v_arr, size_t __pyx_v_row_offset, size_t __pyx_v_row_count, struct qwp_validity *__pyx_v_validity) {
  struct qwp_validity const *__pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._dataframe_columnar_validity", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 04143:         ArrowArray* arr,
 04144:         size_t row_offset,
 04145:         size_t row_count,
 04146:         qwp_validity* validity) except? NULL:
+04147:     if arr.null_count == 0:
  __pyx_t_1 = (__pyx_v_arr->null_count == 0);
  if (__pyx_t_1) {
/* … */
  }
+04148:         return NULL
    __pyx_r = NULL;
    goto __pyx_L0;
+04149:     if row_offset % 8 != 0:
  __pyx_t_1 = ((__pyx_v_row_offset % 8) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+04150:         raise RuntimeError(
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Columnar_validity_slices_must_st};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __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(0, 4150, __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(0, 4150, __pyx_L1_error)
 04151:             'Columnar validity slices must start at byte-aligned row offsets.')
+04152:     validity.bits = (<const uint8_t*>arr.buffers[0]) + (row_offset // 8)
  __pyx_v_validity->bits = (((uint8_t const *)(__pyx_v_arr->buffers[0])) + (__pyx_v_row_offset / 8));
+04153:     validity.bit_len = row_count
  __pyx_v_validity->bit_len = __pyx_v_row_count;
+04154:     return validity
  __pyx_r = __pyx_v_validity;
  goto __pyx_L0;
 04155: 
 04156: 
+04157: cdef bint _dataframe_columnar_has_validity(
static int __pyx_f_7questdb_7_client__dataframe_columnar_has_validity(struct ArrowArray *__pyx_v_arr) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 04158:         ArrowArray* arr) noexcept nogil:
 04159:     # A null array carries no buffer pointers at all, so the bitmap
 04160:     # read is bounded by `n_buffers` before it happens. This is the
 04161:     # gate `_dataframe_columnar_validity` relies on having run.
+04162:     return arr.null_count == 0 or (
  __pyx_t_2 = (__pyx_v_arr->null_count == 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
+04163:         arr.n_buffers >= 1
  __pyx_t_2 = (__pyx_v_arr->n_buffers >= 1);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
+04164:         and arr.buffers != NULL
  __pyx_t_2 = (__pyx_v_arr->buffers != NULL);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
+04165:         and arr.buffers[0] != NULL)
  __pyx_t_2 = ((__pyx_v_arr->buffers[0]) != NULL);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 04166: 
 04167: 
+04168: cdef bint _dataframe_columnar_has_utf8_values(
static int __pyx_f_7questdb_7_client__dataframe_columnar_has_utf8_values(struct ArrowArray *__pyx_v_arr, int __pyx_v_large_offsets) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 04169:         ArrowArray* arr, bint large_offsets) noexcept nogil:
+04170:     if not (arr.n_buffers >= 3 and
  __pyx_t_2 = (__pyx_v_arr->n_buffers >= 3);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
/* … */
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {
/* … */
  }
+04171:             arr.buffers != NULL and
  __pyx_t_2 = (__pyx_v_arr->buffers != NULL);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
+04172:             arr.buffers[1] != NULL):
  __pyx_t_2 = ((__pyx_v_arr->buffers[1]) != NULL);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
+04173:         return False
    __pyx_r = 0;
    goto __pyx_L0;
+04174:     if arr.length == 0 or arr.buffers[2] != NULL:
  __pyx_t_1 = (__pyx_v_arr->length == 0);
  if (!__pyx_t_1) {
  } else {
    __pyx_t_2 = __pyx_t_1;
    goto __pyx_L8_bool_binop_done;
  }
  __pyx_t_1 = ((__pyx_v_arr->buffers[2]) != NULL);
  __pyx_t_2 = __pyx_t_1;
  __pyx_L8_bool_binop_done:;
  if (__pyx_t_2) {
/* … */
  }
+04175:         return True
    __pyx_r = 1;
    goto __pyx_L0;
 04176:     # NULL byte buffer is valid only with zero data bytes (all-null/empty).
+04177:     if large_offsets:
  if (__pyx_v_large_offsets) {
/* … */
  }
+04178:         return (<const int64_t*>arr.buffers[1])[arr.offset + arr.length] == 0
    __pyx_r = ((((int64_t const *)(__pyx_v_arr->buffers[1]))[(__pyx_v_arr->offset + __pyx_v_arr->length)]) == 0);
    goto __pyx_L0;
+04179:     return (<const int32_t*>arr.buffers[1])[arr.offset + arr.length] == 0
  __pyx_r = ((((int32_t const *)(__pyx_v_arr->buffers[1]))[(__pyx_v_arr->offset + __pyx_v_arr->length)]) == 0);
  goto __pyx_L0;
 04180: 
 04181: 
+04182: cdef bint _dataframe_columnar_has_utf8_dictionary(
static int __pyx_f_7questdb_7_client__dataframe_columnar_has_utf8_dictionary(struct ArrowArray *__pyx_v_arr) {
  struct ArrowArray *__pyx_v_dictionary;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 04183:         ArrowArray* arr) noexcept nogil:
+04184:     cdef ArrowArray* dictionary = arr.dictionary
  __pyx_t_1 = __pyx_v_arr->dictionary;
  __pyx_v_dictionary = __pyx_t_1;
+04185:     if dictionary == NULL:
  __pyx_t_2 = (__pyx_v_dictionary == NULL);
  if (__pyx_t_2) {
/* … */
  }
+04186:         return False
    __pyx_r = 0;
    goto __pyx_L0;
 04187:     return (
+04188:         dictionary.offset == 0 and
  __pyx_t_3 = (__pyx_v_dictionary->offset == 0);
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
+04189:         dictionary.n_buffers >= 3 and
  __pyx_t_3 = (__pyx_v_dictionary->n_buffers >= 3);
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
+04190:         dictionary.buffers != NULL and
  __pyx_t_3 = (__pyx_v_dictionary->buffers != NULL);
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
+04191:         dictionary.buffers[1] != NULL and
  __pyx_t_3 = ((__pyx_v_dictionary->buffers[1]) != NULL);
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
+04192:         (dictionary.length == 0 or dictionary.buffers[2] != NULL))
  __pyx_t_3 = (__pyx_v_dictionary->length == 0);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = ((__pyx_v_dictionary->buffers[2]) != NULL);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;
 04193: 
 04194: 
+04195: cdef bint _dataframe_columnar_plan_has_validity(
static int __pyx_f_7questdb_7_client__dataframe_columnar_plan_has_validity(struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan) {
  size_t __pyx_v_col_index;
  struct ArrowArray *__pyx_v_arr;
  struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 04196:         dataframe_plan_t* plan) noexcept nogil:
 04197:     """
 04198:     True when chunk row boundaries must be byte-aligned (multiples of 8).
 04199:     Triggers for:
 04200:     - Any Arrow column whose `null_count != 0` (the encoder reads a
 04201:       validity bitmap and our slicing requires byte-alignment).
 04202:     - Any PyObject source. The planner can't see the nulls until the
 04203:       build phase walks the column; we conservatively assume they
 04204:       might be present and require alignment.
 04205:     - col_source_bool_pyobj specifically packs its VALUES into an
 04206:       LSB-first bitmap; the emit shift `row_offset // 8` requires
 04207:       alignment whether or not nulls are present.
 04208:     """
 04209:     cdef size_t col_index
 04210:     cdef ArrowArray* arr
 04211:     cdef col_t* col
+04212:     for col_index in range(plan.col_count):
  __pyx_t_1 = __pyx_v_plan->col_count;
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_col_index = __pyx_t_3;
+04213:         col = &plan.cols.d[col_index]
    __pyx_v_col = (&(__pyx_v_plan->cols.d[__pyx_v_col_index]));
+04214:         if _is_pyobj_source(col.setup.source):
    __pyx_t_4 = __pyx_f_7questdb_7_client__is_pyobj_source(__pyx_v_col->setup->source);
    if (__pyx_t_4) {
/* … */
    }
+04215:             return True
      __pyx_r = 1;
      goto __pyx_L0;
+04216:         arr = &col.setup.chunks.chunks[0]
    __pyx_v_arr = (&(__pyx_v_col->setup->chunks.chunks[0]));
+04217:         if arr.null_count != 0:
    __pyx_t_4 = (__pyx_v_arr->null_count != 0);
    if (__pyx_t_4) {
/* … */
    }
  }
+04218:             return True
      __pyx_r = 1;
      goto __pyx_L0;
+04219:     return False
  __pyx_r = 0;
  goto __pyx_L0;
 04220: 
 04221: 
+04222: cdef size_t _dataframe_columnar_rows_per_chunk(
static size_t __pyx_f_7questdb_7_client__dataframe_columnar_rows_per_chunk(struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan, size_t __pyx_v_max_rows_per_chunk) {
  size_t __pyx_v_rows_per_chunk;
  size_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 04223:         dataframe_plan_t* plan,
 04224:         size_t max_rows_per_chunk) noexcept nogil:
 04225:     # Clamp to a hard safety upper bound and align to 8 rows when the plan
 04226:     # carries a validity bitmap (chunk boundary must be byte-aligned).
+04227:     cdef size_t rows_per_chunk = max_rows_per_chunk
  __pyx_v_rows_per_chunk = __pyx_v_max_rows_per_chunk;
+04228:     if rows_per_chunk > 1000000:
  __pyx_t_1 = (__pyx_v_rows_per_chunk > 0xF4240);
  if (__pyx_t_1) {
/* … */
  }
+04229:         rows_per_chunk = 1000000
    __pyx_v_rows_per_chunk = 0xF4240;
+04230:     if rows_per_chunk == 0:
  __pyx_t_1 = (__pyx_v_rows_per_chunk == 0);
  if (__pyx_t_1) {
/* … */
  }
+04231:         rows_per_chunk = 1
    __pyx_v_rows_per_chunk = 1;
+04232:     if _dataframe_columnar_plan_has_validity(plan):
  __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_plan_has_validity(__pyx_v_plan);
  if (__pyx_t_1) {
/* … */
  }
+04233:         if rows_per_chunk < 8 and rows_per_chunk < plan.row_count:
    __pyx_t_2 = (__pyx_v_rows_per_chunk < 8);
    if (__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L7_bool_binop_done;
    }
    __pyx_t_2 = (__pyx_v_rows_per_chunk < __pyx_v_plan->row_count);
    __pyx_t_1 = __pyx_t_2;
    __pyx_L7_bool_binop_done:;
    if (__pyx_t_1) {
/* … */
      goto __pyx_L6;
    }
+04234:             rows_per_chunk = 8
      __pyx_v_rows_per_chunk = 8;
+04235:         elif rows_per_chunk > 8:
    __pyx_t_1 = (__pyx_v_rows_per_chunk > 8);
    if (__pyx_t_1) {
/* … */
    }
    __pyx_L6:;
+04236:             rows_per_chunk -= rows_per_chunk % 8
      __pyx_v_rows_per_chunk = (__pyx_v_rows_per_chunk - (__pyx_v_rows_per_chunk % 8));
+04237:             if rows_per_chunk == 0:
      __pyx_t_1 = (__pyx_v_rows_per_chunk == 0);
      if (__pyx_t_1) {
/* … */
      }
+04238:                 rows_per_chunk = 8
        __pyx_v_rows_per_chunk = 8;
+04239:     return rows_per_chunk
  __pyx_r = __pyx_v_rows_per_chunk;
  goto __pyx_L0;
 04240: 
 04241: 
+04242: cdef object _dataframe_columnar_global_failure(str reason):
static PyObject *__pyx_f_7questdb_7_client__dataframe_columnar_global_failure(PyObject *__pyx_v_reason) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client._dataframe_columnar_global_failure", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+04243:     return {
  __Pyx_XDECREF(__pyx_r);
+04244:         'column': None,
  __pyx_t_1 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4244, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_column_2, Py_None) < (0)) __PYX_ERR(0, 4244, __pyx_L1_error)
+04245:         'target': None,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_target, Py_None) < (0)) __PYX_ERR(0, 4244, __pyx_L1_error)
+04246:         'source_code': None,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_source_code, Py_None) < (0)) __PYX_ERR(0, 4244, __pyx_L1_error)
+04247:         'reason': reason,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_reason, __pyx_v_reason) < (0)) __PYX_ERR(0, 4244, __pyx_L1_error)
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 04248:     }
 04249: 
 04250: 
+04251: cdef object _dataframe_columnar_col_failure(
static PyObject *__pyx_f_7questdb_7_client__dataframe_columnar_col_failure(PyObject *__pyx_v_df, struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, PyObject *__pyx_v_reason) {
  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._dataframe_columnar_col_failure", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 04252:         object df,
 04253:         col_t* col,
 04254:         str reason):
+04255:     return {
  __Pyx_XDECREF(__pyx_r);
+04256:         'column': df.columns[col.setup.orig_index],
  __pyx_t_1 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_2, __pyx_v_col->setup->orig_index, size_t, 0, __Pyx_PyLong_FromSize_t, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_column_2, __pyx_t_3) < (0)) __PYX_ERR(0, 4256, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+04257:         'target': _TARGET_NAMES[col.setup.target],
  if (unlikely(__pyx_v_7questdb_7_client__TARGET_NAMES == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 4257, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_PyLong_From_enum____pyx_t_7questdb_7_client_col_target_t(__pyx_v_col->setup->target); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4257, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_v_7questdb_7_client__TARGET_NAMES, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4257, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_target, __pyx_t_2) < (0)) __PYX_ERR(0, 4256, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+04258:         'source_code': <int>col.setup.source,
  __pyx_t_2 = __Pyx_PyLong_From_int(((int)__pyx_v_col->setup->source)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4258, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_source_code, __pyx_t_2) < (0)) __PYX_ERR(0, 4256, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+04259:         'reason': reason,
  if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_reason, __pyx_v_reason) < (0)) __PYX_ERR(0, 4256, __pyx_L1_error)
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 04260:     }
 04261: 
 04262: 
+04263: cdef object _dataframe_columnar_plan_normalizations(
static PyObject *__pyx_f_7questdb_7_client__dataframe_columnar_plan_normalizations(CYTHON_UNUSED PyObject *__pyx_v_df, CYTHON_UNUSED struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan) {
  PyObject *__pyx_v_normalizations = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client._dataframe_columnar_plan_normalizations", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_normalizations);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 04264:         object df,
 04265:         dataframe_plan_t* plan):
+04266:     cdef list normalizations = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_normalizations = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+04267:     return normalizations
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_normalizations);
  __pyx_r = __pyx_v_normalizations;
  goto __pyx_L0;
 04268: 
 04269: 
+04270: cdef object _dataframe_columnar_plan_failures(
static PyObject *__pyx_f_7questdb_7_client__dataframe_columnar_plan_failures(PyObject *__pyx_v_df, struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan) {
  PyObject *__pyx_v_failures = 0;
  size_t __pyx_v_col_index;
  size_t __pyx_v_field_count;
  struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col;
  int64_t const *__pyx_v_ts_data;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("questdb._client._dataframe_columnar_plan_failures", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_failures);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 04271:         object df,
 04272:         dataframe_plan_t* plan):
+04273:     cdef list failures = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_failures = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 04274:     cdef size_t col_index
+04275:     cdef size_t field_count = 0
  __pyx_v_field_count = 0;
 04276:     cdef col_t* col
 04277:     cdef const int64_t* ts_data
 04278: 
+04279:     if (plan.col_count == 0) or (plan.row_count == 0):
  __pyx_t_3 = (__pyx_v_plan->col_count == 0);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = (__pyx_v_plan->row_count == 0);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {
/* … */
  }
+04280:         return failures
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_failures);
    __pyx_r = __pyx_v_failures;
    goto __pyx_L0;
 04281: 
+04282:     if plan.c_table_name.buf == NULL:
  __pyx_t_2 = (__pyx_v_plan->c_table_name.buf == NULL);
  if (__pyx_t_2) {
/* … */
  }
+04283:         failures.append(_dataframe_columnar_global_failure(
    __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_global_failure(__pyx_mstate_global->__pyx_kp_u_v1_requires_a_fixed_table_name_t); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4283, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4283, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 04284:             'v1 requires a fixed table_name; table_name_col is not supported.'))
 04285: 
+04286:     if (plan.at_value != _AT_IS_SET_BY_COLUMN
  __pyx_t_3 = (__pyx_v_plan->at_value != __pyx_v_7questdb_7_client__AT_IS_SET_BY_COLUMN);
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L8_bool_binop_done;
  }
/* … */
  if (__pyx_t_2) {
/* … */
  }
+04287:             and plan.at_value != _AT_IS_SERVER_NOW
  __pyx_t_3 = (__pyx_v_plan->at_value != __pyx_v_7questdb_7_client__AT_IS_SERVER_NOW);
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L8_bool_binop_done;
  }
+04288:             and plan.at_value < 0):
  __pyx_t_3 = (__pyx_v_plan->at_value < 0);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L8_bool_binop_done:;
+04289:         failures.append(_dataframe_columnar_global_failure(
    __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_global_failure(__pyx_mstate_global->__pyx_kp_u_v1_requires_at_to_be_a_non_null); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4289, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4289, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 04290:             'v1 requires at to be a non-null DataFrame timestamp column, '
 04291:             'a fixed timestamp shared by every row, or the explicit '
 04292:             'ServerTimestamp sentinel.'))
 04293: 
+04294:     for col_index in range(plan.col_count):
  __pyx_t_5 = __pyx_v_plan->col_count;
  __pyx_t_6 = __pyx_t_5;
  for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
    __pyx_v_col_index = __pyx_t_7;
+04295:         col = &plan.cols.d[col_index]
    __pyx_v_col = (&(__pyx_v_plan->cols.d[__pyx_v_col_index]));
+04296:         if col.setup.target == col_target_t.col_target_skip:
    __pyx_t_2 = (__pyx_v_col->setup->target == __pyx_e_7questdb_7_client_col_target_skip);
    if (__pyx_t_2) {
/* … */
    }
+04297:             continue
      goto __pyx_L11_continue;
+04298:         if col.setup.target == col_target_t.col_target_table:
    __pyx_t_2 = (__pyx_v_col->setup->target == __pyx_e_7questdb_7_client_col_target_table);
    if (__pyx_t_2) {
/* … */
    }
+04299:             failures.append(_dataframe_columnar_col_failure(
      __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_table_name_columns_are_not_suppo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4299, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4299, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 04300:                 df, col, 'table-name columns are not supported in v1.'))
+04301:             continue
      goto __pyx_L11_continue;
+04302:         if col.setup.target != col_target_t.col_target_at:
    __pyx_t_2 = (__pyx_v_col->setup->target != __pyx_e_7questdb_7_client_col_target_at);
    if (__pyx_t_2) {
/* … */
    }
+04303:             field_count += 1
      __pyx_v_field_count = (__pyx_v_field_count + 1);
+04304:         if col.setup.target == col_target_t.col_target_column_arrow:
    __pyx_t_2 = (__pyx_v_col->setup->target == __pyx_e_7questdb_7_client_col_target_column_arrow);
    if (__pyx_t_2) {
/* … */
      goto __pyx_L16;
    }
 04305:             # Generic Arrow passthrough is opaque to this planner. The Rust
 04306:             # importer validates the type-specific buffer layout, validity,
 04307:             # children and logical offset. This side only needs the one array
 04308:             # that the per-column import handle accepts, spanning every row in
 04309:             # the pandas frame.
+04310:             if not _dataframe_columnar_has_single_logical_chunk(
      __pyx_t_2 = (!__pyx_f_7questdb_7_client__dataframe_columnar_has_single_logical_chunk(__pyx_v_col, __pyx_v_plan->row_count));
      if (__pyx_t_2) {
/* … */
      }
 04311:                     col, plan.row_count):
+04312:                 failures.append(_dataframe_columnar_col_failure(
        __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_requires_one_Arrow_chunk_span); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4312, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4312, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 04313:                     df, col,
 04314:                     'v1 requires one Arrow chunk spanning the whole column.'))
+04315:                 continue
        goto __pyx_L11_continue;
 04316:         else:
 04317:             # Direct encoders below address buffers[0]/buffers[1] themselves,
 04318:             # so they require a zero-offset value buffer and a readable
 04319:             # validity bitmap. Arrow passthrough deliberately does not.
+04320:             if not _dataframe_columnar_has_single_contiguous_chunk(
    /*else*/ {
/* … */
      __pyx_t_2 = (!__pyx_f_7questdb_7_client__dataframe_columnar_has_single_contiguous_chunk(__pyx_v_col, __pyx_v_plan->row_count));
/* … */
      if (__pyx_t_2) {
/* … */
      }
 04321:                     col, plan.row_count):
+04322:                 failures.append(_dataframe_columnar_col_failure(
        __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_requires_one_contiguous_zero); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4322, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4322, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 04323:                     df, col,
 04324:                     'v1 requires one contiguous zero-offset buffer.'))
+04325:                 continue
        goto __pyx_L11_continue;
+04326:             if not _dataframe_columnar_has_validity(
      __pyx_t_2 = (!__pyx_f_7questdb_7_client__dataframe_columnar_has_validity((&(__pyx_v_col->setup->chunks.chunks[0]))));
      if (__pyx_t_2) {
/* … */
      }
    }
    __pyx_L16:;
 04327:                     &col.setup.chunks.chunks[0]):
+04328:                 failures.append(_dataframe_columnar_col_failure(
        __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_requires_a_zero_offset_validi); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4328, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4328, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 04329:                     df, col, 'v1 requires a zero-offset validity bitmap when '
 04330:                     'nulls are present.'))
+04331:                 continue
        goto __pyx_L11_continue;
 04332: 
+04333:         if col.setup.target == col_target_t.col_target_column_bool:
    switch (__pyx_v_col->setup->target) {
      case __pyx_e_7questdb_7_client_col_target_column_bool:
/* … */
      break;
      case __pyx_e_7questdb_7_client_col_target_column_i64:
+04334:             if col.setup.source not in (
      switch (__pyx_v_col->setup->source) {
        case __pyx_e_7questdb_7_client_col_source_bool_pyobj:
/* … */
        __pyx_t_2 = 0;
        break;
        default:
        __pyx_t_2 = 1;
        break;
      }
      __pyx_t_3 = __pyx_t_2;
      if (__pyx_t_3) {
/* … */
      }
+04335:                     col_source_t.col_source_bool_pyobj,
        case __pyx_e_7questdb_7_client_col_source_bool_numpy:
 04336:                     col_source_t.col_source_bool_numpy):
+04337:                 failures.append(_dataframe_columnar_col_failure(
        __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_only_supports_object_dtype_bo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4337, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4337, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 04338:                     df,
 04339:                     col,
 04340:                     'v1 only supports object-dtype bool or NumPy bool '
 04341:                     'columns; Arrow nullable bool not yet supported.'))
+04342:         elif col.setup.target == col_target_t.col_target_column_i64:
      break;
      case __pyx_e_7questdb_7_client_col_target_column_f64:
+04343:             if col.setup.source not in (
      switch (__pyx_v_col->setup->source) {
        case __pyx_e_7questdb_7_client_col_source_i64_numpy:
/* … */
        __pyx_t_3 = 0;
        break;
        default:
        __pyx_t_3 = 1;
        break;
      }
      __pyx_t_2 = __pyx_t_3;
      if (__pyx_t_2) {
/* … */
      }
+04344:                     col_source_t.col_source_i64_numpy,
        case __pyx_e_7questdb_7_client_col_source_i8_numpy:
+04345:                     col_source_t.col_source_i8_numpy,
        case __pyx_e_7questdb_7_client_col_source_i16_numpy:
+04346:                     col_source_t.col_source_i16_numpy,
        case __pyx_e_7questdb_7_client_col_source_i32_numpy:
+04347:                     col_source_t.col_source_i32_numpy,
        case __pyx_e_7questdb_7_client_col_source_u8_numpy:
+04348:                     col_source_t.col_source_u8_numpy,
        case __pyx_e_7questdb_7_client_col_source_u16_numpy:
+04349:                     col_source_t.col_source_u16_numpy,
        case __pyx_e_7questdb_7_client_col_source_u32_numpy:
+04350:                     col_source_t.col_source_u32_numpy,
        case __pyx_e_7questdb_7_client_col_source_u64_numpy:
+04351:                     col_source_t.col_source_u64_numpy,
        case __pyx_e_7questdb_7_client_col_source_u32_arrow:
+04352:                     col_source_t.col_source_u32_arrow,
        case __pyx_e_7questdb_7_client_col_source_i64_arrow:
+04353:                     col_source_t.col_source_i64_arrow,
        case __pyx_e_7questdb_7_client_col_source_int_pyobj:
 04354:                     col_source_t.col_source_int_pyobj):
+04355:                 failures.append(_dataframe_columnar_col_failure(
        __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_only_supports_NumPy_signed_un); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4355, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4355, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 04356:                     df,
 04357:                     col,
 04358:                     'v1 only supports NumPy signed/unsigned int columns, '
 04359:                     'Arrow uint32/int64 columns, or object-dtype int '
 04360:                     'columns.'))
+04361:         elif col.setup.target == col_target_t.col_target_column_f64:
      break;
      case __pyx_e_7questdb_7_client_col_target_column_ts:
+04362:             if col.setup.source not in (
      switch (__pyx_v_col->setup->source) {
        case __pyx_e_7questdb_7_client_col_source_f64_numpy:
/* … */
        __pyx_t_2 = 0;
        break;
        default:
        __pyx_t_2 = 1;
        break;
      }
      __pyx_t_3 = __pyx_t_2;
      if (__pyx_t_3) {
/* … */
      }
+04363:                     col_source_t.col_source_f64_numpy,
        case __pyx_e_7questdb_7_client_col_source_f32_numpy:
+04364:                     col_source_t.col_source_f32_numpy,
        case __pyx_e_7questdb_7_client_col_source_f64_arrow:
+04365:                     col_source_t.col_source_f64_arrow,
        case __pyx_e_7questdb_7_client_col_source_float_pyobj:
 04366:                     col_source_t.col_source_float_pyobj):
+04367:                 failures.append(_dataframe_columnar_col_failure(
        __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_only_supports_NumPy_float32_f); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4367, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4367, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 04368:                     df,
 04369:                     col,
 04370:                     'v1 only supports NumPy float32/float64, Arrow '
 04371:                     'float64, or object-dtype float columns.'))
+04372:         elif col.setup.target == col_target_t.col_target_column_ts:
      break;
      case __pyx_e_7questdb_7_client_col_target_column_str:
+04373:             if col.setup.source not in (
      switch (__pyx_v_col->setup->source) {
        case __pyx_e_7questdb_7_client_col_source_dt64ns_numpy:
/* … */
        __pyx_t_3 = 0;
        break;
        default:
        __pyx_t_3 = 1;
        break;
      }
      __pyx_t_2 = __pyx_t_3;
      if (__pyx_t_2) {
/* … */
        goto __pyx_L23;
      }
+04374:                     col_source_t.col_source_dt64ns_numpy,
        case __pyx_e_7questdb_7_client_col_source_dt64us_numpy:
+04375:                     col_source_t.col_source_dt64us_numpy,
        case __pyx_e_7questdb_7_client_col_source_dt64ns_tz_arrow:
+04376:                     col_source_t.col_source_dt64ns_tz_arrow,
        case __pyx_e_7questdb_7_client_col_source_dt64us_tz_arrow:
+04377:                     col_source_t.col_source_dt64us_tz_arrow,
        case __pyx_e_7questdb_7_client_col_source_datetime_pyobj:
 04378:                     col_source_t.col_source_datetime_pyobj):
+04379:                 failures.append(_dataframe_columnar_col_failure(
        __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_only_supports_NumPy_datetime6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4379, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4379, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 04380:                     df,
 04381:                     col,
 04382:                     'v1 only supports NumPy datetime64[ns/us], '
 04383:                     'tz-aware datetime64/timestamp[pyarrow], or '
 04384:                     'object-dtype datetime timestamp field columns.'))
+04385:             elif (col.setup.source == col_source_t.col_source_dt64ns_numpy
      __pyx_t_3 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_dt64ns_numpy);
      if (__pyx_t_3) {
      } else {
        __pyx_t_2 = __pyx_t_3;
        goto __pyx_L24_bool_binop_done;
      }
/* … */
      if (__pyx_t_2) {
/* … */
      }
      __pyx_L23:;
+04386:                     and _PYARROW is None):
      __pyx_t_3 = (__pyx_v_7questdb_7_client__PYARROW == Py_None);
      __pyx_t_2 = __pyx_t_3;
      __pyx_L24_bool_binop_done:;
 04387:                 # NaT in a datetime64[ns] field is INT64_MIN nanoseconds;
 04388:                 # the zero-copy ns->micros wire conversion would corrupt
 04389:                 # that null sentinel into a bogus 1677 timestamp. With
 04390:                 # pyarrow, _dataframe_columnar_promote_cols already
 04391:                 # re-exported any NaT-carrying column through Arrow (and
 04392:                 # imported pyarrow doing so), leaving nothing to reject.
+04393:                 if _dataframe_columnar_col_has_nat(col, plan.row_count):
        __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_col_has_nat(__pyx_v_col, __pyx_v_plan->row_count);
        if (__pyx_t_2) {
/* … */
        }
+04394:                     failures.append(_dataframe_columnar_col_failure(
          __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_datetime64_ns_timestamp_field); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4394, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4394, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 04395:                         df,
 04396:                         col,
 04397:                         'v1 datetime64[ns] timestamp field columns cannot '
 04398:                         'contain NaT without pyarrow; install pyarrow, or '
 04399:                         'use datetime64[us] or an object-dtype datetime '
 04400:                         'column for NULL timestamps.'))
+04401:         elif col.setup.target == col_target_t.col_target_column_str:
      break;
      case __pyx_e_7questdb_7_client_col_target_symbol:
+04402:             if col.setup.source == col_source_t.col_source_str_pyobj:
      __pyx_t_2 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_str_pyobj);
      if (__pyx_t_2) {
        goto __pyx_L27;
      }
 04403:                 # PyObject sources are validated by the pre-build phase
 04404:                 # at row level (one walk catches all rows). The planner
 04405:                 # has nothing more to check here.
 04406:                 pass
+04407:             elif col.setup.source in (
      switch (__pyx_v_col->setup->source) {
        case __pyx_e_7questdb_7_client_col_source_str_i8_cat:
/* … */
        __pyx_t_2 = 1;
        break;
        default:
        __pyx_t_2 = 0;
        break;
      }
      __pyx_t_3 = __pyx_t_2;
      if (__pyx_t_3) {
/* … */
        goto __pyx_L27;
      }
+04408:                     col_source_t.col_source_str_i8_cat,
        case __pyx_e_7questdb_7_client_col_source_str_i16_cat:
+04409:                     col_source_t.col_source_str_i16_cat,
        case __pyx_e_7questdb_7_client_col_source_str_i32_cat:
 04410:                     col_source_t.col_source_str_i32_cat):
+04411:                 if not _dataframe_columnar_has_utf8_dictionary(
        __pyx_t_3 = (!__pyx_f_7questdb_7_client__dataframe_columnar_has_utf8_dictionary((&(__pyx_v_col->setup->chunks.chunks[0]))));
        if (__pyx_t_3) {
/* … */
        }
 04412:                         &col.setup.chunks.chunks[0]):
+04413:                     failures.append(_dataframe_columnar_col_failure(
          __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_requires_Arrow_UTF_8_or_Large); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4413, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4413, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 04414:                         df,
 04415:                         col,
 04416:                         'v1 requires Arrow UTF-8 or LargeUtf8 dictionary '
 04417:                         'offsets and byte buffers for categorical columns.'))
+04418:             elif col.setup.source not in (
      switch (__pyx_v_col->setup->source) {
        case __pyx_e_7questdb_7_client_col_source_str_utf8_arrow:
/* … */
        __pyx_t_3 = 0;
        break;
        default:
        __pyx_t_3 = 1;
        break;
      }
      __pyx_t_2 = __pyx_t_3;
      if (__pyx_t_2) {
/* … */
        goto __pyx_L27;
      }
+04419:                     col_source_t.col_source_str_utf8_arrow,
        case __pyx_e_7questdb_7_client_col_source_str_lrg_utf8_arrow:
 04420:                     col_source_t.col_source_str_lrg_utf8_arrow):
+04421:                 failures.append(_dataframe_columnar_col_failure(
        __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_only_supports_string_pyarrow); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4421, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4421, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 04422:                     df,
 04423:                     col,
 04424:                     'v1 only supports string[pyarrow] columns backed by '
 04425:                     'Arrow UTF-8 or LargeUtf8, pandas string Categorical, '
 04426:                     'or object-dtype str.'))
+04427:             elif not _dataframe_columnar_has_utf8_values(
      __pyx_t_2 = (!__pyx_f_7questdb_7_client__dataframe_columnar_has_utf8_values((&(__pyx_v_col->setup->chunks.chunks[0])), (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_str_lrg_utf8_arrow)));
      if (__pyx_t_2) {
/* … */
      }
      __pyx_L27:;
 04428:                     &col.setup.chunks.chunks[0],
 04429:                     col.setup.source ==
 04430:                         col_source_t.col_source_str_lrg_utf8_arrow):
+04431:                 failures.append(_dataframe_columnar_col_failure(
        __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_requires_Arrow_UTF_8_or_Large_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4431, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4431, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 04432:                     df,
 04433:                     col,
 04434:                     'v1 requires Arrow UTF-8 or LargeUtf8 offsets and byte buffers.'))
+04435:         elif col.setup.target == col_target_t.col_target_symbol:
      break;
      case __pyx_e_7questdb_7_client_col_target_at:
+04436:             if col.setup.source in (
      switch (__pyx_v_col->setup->source) {
        case __pyx_e_7questdb_7_client_col_source_str_i8_cat:
/* … */
        break;
        case __pyx_e_7questdb_7_client_col_source_str_utf8_arrow:
+04437:                     col_source_t.col_source_str_i8_cat,
        case __pyx_e_7questdb_7_client_col_source_str_i16_cat:
+04438:                     col_source_t.col_source_str_i16_cat,
        case __pyx_e_7questdb_7_client_col_source_str_i32_cat:
 04439:                     col_source_t.col_source_str_i32_cat):
+04440:                 if not _dataframe_columnar_has_utf8_dictionary(
        __pyx_t_2 = (!__pyx_f_7questdb_7_client__dataframe_columnar_has_utf8_dictionary((&(__pyx_v_col->setup->chunks.chunks[0]))));
        if (__pyx_t_2) {
/* … */
        }
 04441:                         &col.setup.chunks.chunks[0]):
+04442:                     failures.append(_dataframe_columnar_col_failure(
          __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_requires_Arrow_UTF_8_or_Large_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4442, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4442, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 04443:                         df,
 04444:                         col,
 04445:                         'v1 requires Arrow UTF-8 or LargeUtf8 dictionary '
 04446:                         'offsets and byte buffers for categorical symbols.'))
+04447:             elif col.setup.source in (
        break;
        default:
+04448:                     col_source_t.col_source_str_utf8_arrow,
        case __pyx_e_7questdb_7_client_col_source_str_lrg_utf8_arrow:
 04449:                     col_source_t.col_source_str_lrg_utf8_arrow):
+04450:                 if not _dataframe_columnar_has_utf8_values(
        __pyx_t_2 = (!__pyx_f_7questdb_7_client__dataframe_columnar_has_utf8_values((&(__pyx_v_col->setup->chunks.chunks[0])), (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_str_lrg_utf8_arrow)));
        if (__pyx_t_2) {
/* … */
        }
 04451:                         &col.setup.chunks.chunks[0],
 04452:                         col.setup.source ==
 04453:                             col_source_t.col_source_str_lrg_utf8_arrow):
+04454:                     failures.append(_dataframe_columnar_col_failure(
          __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_requires_Arrow_UTF_8_or_Large_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4454, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4454, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 04455:                         df,
 04456:                         col,
 04457:                         'v1 requires Arrow UTF-8 or LargeUtf8 offsets and '
 04458:                         'byte buffers.'))
 04459:             else:
+04460:                 failures.append(_dataframe_columnar_col_failure(
        __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_only_supports_pandas_string_C); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4460, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4460, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        break;
      }
 04461:                     df,
 04462:                     col,
 04463:                     'v1 only supports pandas string Categorical or '
 04464:                     'string[pyarrow] symbol columns.'))
+04465:         elif col.setup.target == col_target_t.col_target_at:
      break;
      case __pyx_e_7questdb_7_client_col_target_column_decimal:
+04466:             if col.setup.source not in (
      switch (__pyx_v_col->setup->source) {
        case __pyx_e_7questdb_7_client_col_source_dt64ns_numpy:
/* … */
        __pyx_t_2 = 0;
        break;
        default:
        __pyx_t_2 = 1;
        break;
      }
      __pyx_t_3 = __pyx_t_2;
      if (__pyx_t_3) {
/* … */
        goto __pyx_L31;
      }
+04467:                     col_source_t.col_source_dt64ns_numpy,
        case __pyx_e_7questdb_7_client_col_source_dt64us_numpy:
+04468:                     col_source_t.col_source_dt64us_numpy,
        case __pyx_e_7questdb_7_client_col_source_dt64ns_tz_arrow:
+04469:                     col_source_t.col_source_dt64ns_tz_arrow,
        case __pyx_e_7questdb_7_client_col_source_dt64us_tz_arrow:
+04470:                     col_source_t.col_source_dt64us_tz_arrow,
        case __pyx_e_7questdb_7_client_col_source_dt64ms_tz_arrow:
+04471:                     col_source_t.col_source_dt64ms_tz_arrow,
        case __pyx_e_7questdb_7_client_col_source_dt64s_tz_arrow:
 04472:                     col_source_t.col_source_dt64s_tz_arrow):
+04473:                 failures.append(_dataframe_columnar_col_failure(
        __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_only_supports_NumPy_datetime6_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4473, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4473, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 04474:                     df,
 04475:                     col,
 04476:                     'v1 only supports NumPy datetime64[ns/us] or '
 04477:                     'tz-aware datetime64/timestamp[pyarrow] '
 04478:                     'designated timestamp columns.'))
+04479:             elif (col.setup.source in (
      switch (__pyx_v_col->setup->source) {
        case __pyx_e_7questdb_7_client_col_source_dt64ns_tz_arrow:
/* … */
        __pyx_t_2 = 1;
        break;
        default:
        __pyx_t_2 = 0;
        break;
      }
      __pyx_t_8 = __pyx_t_2;
      if (__pyx_t_8) {
      } else {
        __pyx_t_3 = __pyx_t_8;
        goto __pyx_L32_bool_binop_done;
      }
/* … */
      if (__pyx_t_3) {
/* … */
        goto __pyx_L31;
      }
+04480:                         col_source_t.col_source_dt64ns_tz_arrow,
        case __pyx_e_7questdb_7_client_col_source_dt64us_tz_arrow:
+04481:                         col_source_t.col_source_dt64us_tz_arrow,
        case __pyx_e_7questdb_7_client_col_source_dt64ms_tz_arrow:
+04482:                         col_source_t.col_source_dt64ms_tz_arrow,
        case __pyx_e_7questdb_7_client_col_source_dt64s_tz_arrow:
 04483:                         col_source_t.col_source_dt64s_tz_arrow)
+04484:                     and col.setup.chunks.chunks[0].null_count != 0):
      __pyx_t_8 = ((__pyx_v_col->setup->chunks.chunks[0]).null_count != 0);
      __pyx_t_3 = __pyx_t_8;
      __pyx_L32_bool_binop_done:;
+04485:                 failures.append(_dataframe_columnar_col_failure(
        __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_designated_timestamp_columns); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4485, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4485, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 04486:                     df,
 04487:                     col,
 04488:                     'v1 designated timestamp columns cannot contain nulls.'))
 04489:             else:
+04490:                 ts_data = <const int64_t*>col.setup.chunks.chunks[0].buffers[1]
      /*else*/ {
        __pyx_v_ts_data = ((int64_t const *)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
+04491:                 if _dataframe_columnar_i64_has_nat(ts_data, plan.row_count):
        __pyx_t_3 = __pyx_f_7questdb_7_client__dataframe_columnar_i64_has_nat(__pyx_v_ts_data, __pyx_v_plan->row_count);
        if (__pyx_t_3) {
/* … */
          goto __pyx_L34;
        }
+04492:                     failures.append(_dataframe_columnar_col_failure(
          __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_designated_timestamp_columns_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4492, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4492, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 04493:                         df,
 04494:                         col,
 04495:                         'v1 designated timestamp columns cannot contain NaT.'))
+04496:                 elif _dataframe_columnar_i64_has_negative(
        __pyx_t_3 = __pyx_f_7questdb_7_client__dataframe_columnar_i64_has_negative(__pyx_v_ts_data, __pyx_v_plan->row_count);
        if (__pyx_t_3) {
/* … */
        }
        __pyx_L34:;
      }
      __pyx_L31:;
 04497:                         ts_data, plan.row_count):
+04498:                     failures.append(_dataframe_columnar_col_failure(
          __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_designated_timestamp_columns_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4498, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4498, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 04499:                         df,
 04500:                         col,
 04501:                         'v1 designated timestamp columns cannot contain '
 04502:                         'timestamps before the Unix epoch.'))
+04503:         elif col.setup.target == col_target_t.col_target_column_decimal:
      break;
      case __pyx_e_7questdb_7_client_col_target_column_i8:
+04504:             if col.setup.source == col_source_t.col_source_decimal_pyobj:
      __pyx_t_3 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_decimal_pyobj);
      if (__pyx_t_3) {
/* … */
        goto __pyx_L35;
      }
 04505:                 # _dataframe_columnar_promote_cols re-exports these through
 04506:                 # Arrow; reaching this branch means pyarrow is unavailable.
+04507:                 failures.append(_dataframe_columnar_col_failure(
        __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_object_dtype_Decimal_columns_req); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4507, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4507, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 04508:                     df,
 04509:                     col,
 04510:                     'object-dtype Decimal columns require pyarrow on the '
 04511:                     'columnar path; install pyarrow, or back the column '
 04512:                     'with an Arrow decimal type.'))
+04513:             elif col.setup.source not in (
      switch (__pyx_v_col->setup->source) {
        case __pyx_e_7questdb_7_client_col_source_decimal32_arrow:
/* … */
        __pyx_t_3 = 0;
        break;
        default:
        __pyx_t_3 = 1;
        break;
      }
      __pyx_t_8 = __pyx_t_3;
      if (__pyx_t_8) {
/* … */
      }
      __pyx_L35:;
+04514:                     col_source_t.col_source_decimal32_arrow,
        case __pyx_e_7questdb_7_client_col_source_decimal64_arrow:
+04515:                     col_source_t.col_source_decimal64_arrow,
        case __pyx_e_7questdb_7_client_col_source_decimal128_arrow:
+04516:                     col_source_t.col_source_decimal128_arrow,
        case __pyx_e_7questdb_7_client_col_source_decimal256_arrow:
 04517:                     col_source_t.col_source_decimal256_arrow):
+04518:                 failures.append(_dataframe_columnar_col_failure(
        __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, __pyx_mstate_global->__pyx_kp_u_v1_only_supports_Arrow_backed_de); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4518, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4518, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 04519:                     df,
 04520:                     col,
 04521:                     'v1 only supports Arrow-backed decimal columns '
 04522:                     '(pyarrow decimal32/64/128/256).'))
+04523:         elif col.setup.target in (
      break;
      default:
+04524:                 col_target_t.col_target_column_i8,
      case __pyx_e_7questdb_7_client_col_target_column_i16:
+04525:                 col_target_t.col_target_column_i16,
      case __pyx_e_7questdb_7_client_col_target_column_i32:
+04526:                 col_target_t.col_target_column_i32,
      case __pyx_e_7questdb_7_client_col_target_column_f32:
+04527:                 col_target_t.col_target_column_f32,
      case __pyx_e_7questdb_7_client_col_target_column_uuid:
+04528:                 col_target_t.col_target_column_uuid,
      case __pyx_e_7questdb_7_client_col_target_column_ipv4:
+04529:                 col_target_t.col_target_column_ipv4,
      case __pyx_e_7questdb_7_client_col_target_column_binary:
+04530:                 col_target_t.col_target_column_binary,
      case __pyx_e_7questdb_7_client_col_target_column_arrow:
 04531:                 col_target_t.col_target_column_arrow):
 04532:             # Column-QWP-only targets reached via `_FIELD_TARGETS_QWP`.
 04533:             # Routing has already held each one's source to its set in
 04534:             # `_TARGET_TO_SOURCES`, and the append handles every member
 04535:             # of that set. The contiguous-buffer +
 04536:             # validity checks above cover layout; the per-type FFI
 04537:             # handles the wire encoding. col_target_column_arrow delegates
 04538:             # type validation to the Rust importer.
 04539:             pass
 04540:         else:
+04541:             failures.append(_dataframe_columnar_col_failure(
      __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_col_failure(__pyx_v_df, __pyx_v_col, ((PyObject*)__pyx_t_9)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4541, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4541, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      break;
    }
    __pyx_L11_continue:;
  }
 04542:                 df,
 04543:                 col,
+04544:                 f'v1 does not support {_TARGET_NAMES[col.setup.target]} '
      if (unlikely(__pyx_v_7questdb_7_client__TARGET_NAMES == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 4544, __pyx_L1_error)
      }
      __pyx_t_1 = __Pyx_PyLong_From_enum____pyx_t_7questdb_7_client_col_target_t(__pyx_v_col->setup->target); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4544, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_9 = __Pyx_PyDict_GetItem(__pyx_v_7questdb_7_client__TARGET_NAMES, __pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4544, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_t_9, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4544, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_10[0] = __pyx_mstate_global->__pyx_kp_u_v1_does_not_support;
      __pyx_t_10[1] = __pyx_t_1;
      __pyx_t_10[2] = __pyx_mstate_global->__pyx_kp_u_columns_3;
      __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_10, 3, 20 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1) + 9, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1));
      if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4544, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 04545:                 'columns.'))
 04546: 
+04547:     if field_count == 0:
  __pyx_t_8 = (__pyx_v_field_count == 0);
  if (__pyx_t_8) {
/* … */
  }
+04548:         failures.append(_dataframe_columnar_global_failure(
    __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_global_failure(__pyx_mstate_global->__pyx_kp_u_v1_requires_at_least_one_non_tim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4548, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_failures, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4548, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 04549:             'v1 requires at least one non-timestamp data column.'))
 04550: 
+04551:     return failures
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_failures);
  __pyx_r = __pyx_v_failures;
  goto __pyx_L0;
 04552: 
 04553: 
+04554: cdef void_int _dataframe_columnar_validate_plan(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_validate_plan(PyObject *__pyx_v_df, struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan) {
  PyObject *__pyx_v_failures = 0;
  __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_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client._dataframe_columnar_validate_plan", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_failures);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 04555:         object df,
 04556:         dataframe_plan_t* plan) except -1:
+04557:     cdef object failures = _dataframe_columnar_plan_failures(df, plan)
  __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_plan_failures(__pyx_v_df, __pyx_v_plan); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4557, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_failures = __pyx_t_1;
  __pyx_t_1 = 0;
+04558:     if failures:
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_failures); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 4558, __pyx_L1_error)
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+04559:         raise UnsupportedDataFrameShapeError(
    __pyx_t_3 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_UnsupportedDataFrameShapeError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4559, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
 04560:             'DataFrame is not supported by QuestDB.dataframe() columnar v1.',
+04561:             failures)
    __pyx_t_5 = 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_5 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_DataFrame_is_not_supported_by_Qu, __pyx_v_failures};
      __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_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4559, __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(0, 4559, __pyx_L1_error)
 04562: 
 04563: 
+04564: cdef object _dataframe_columnar_ndarray_col_to_arrow(object df, col_t* col):
static PyObject *__pyx_f_7questdb_7_client__dataframe_columnar_ndarray_col_to_arrow(PyObject *__pyx_v_df, struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col) {
  PyObject *__pyx_v_series = 0;
  PyObject *__pyx_v_cell = 0;
  PyArrayObject *__pyx_v_arr;
  int __pyx_v_nested;
  PyObject *__pyx_v_col_name = 0;
  PyObject *__pyx_9genexpr17__pyx_v_cell = 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_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_AddTraceback("questdb._client._dataframe_columnar_ndarray_col_to_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_series);
  __Pyx_XDECREF(__pyx_v_cell);
  __Pyx_XDECREF(__pyx_v_col_name);
  __Pyx_XDECREF(__pyx_9genexpr17__pyx_v_cell);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+04565:     cdef object series = df.iloc[:, col.setup.orig_index]
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4565, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyLong_FromSize_t(__pyx_v_col->setup->orig_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4565, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4565, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_mstate_global->__pyx_slice[0]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[0]);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_mstate_global->__pyx_slice[0]) != (0)) __PYX_ERR(0, 4565, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_2);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2) != (0)) __PYX_ERR(0, 4565, __pyx_L1_error);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4565, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_series = __pyx_t_2;
  __pyx_t_2 = 0;
 04566:     cdef object cell
 04567:     cdef PyArrayObject* arr
+04568:     cdef bint nested = False
  __pyx_v_nested = 0;
+04569:     cdef object col_name = df.columns[col.setup.orig_index]
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4569, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_2, __pyx_v_col->setup->orig_index, size_t, 0, __Pyx_PyLong_FromSize_t, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4569, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_col_name = __pyx_t_3;
  __pyx_t_3 = 0;
+04570:     for cell in series:
  if (likely(PyList_CheckExact(__pyx_v_series)) || PyTuple_CheckExact(__pyx_v_series)) {
    __pyx_t_3 = __pyx_v_series; __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
  } else {
    __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_series); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4570, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4570, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_5)) {
      if (likely(PyList_CheckExact(__pyx_t_3))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 4570, __pyx_L1_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;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 4570, __pyx_L1_error)
          #endif
          if (__pyx_t_4 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_2 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4));
        #else
        __pyx_t_2 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_4);
        #endif
        ++__pyx_t_4;
      }
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4570, __pyx_L1_error)
    } else {
      __pyx_t_2 = __pyx_t_5(__pyx_t_3);
      if (unlikely(!__pyx_t_2)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 4570, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_XDECREF_SET(__pyx_v_cell, __pyx_t_2);
    __pyx_t_2 = 0;
/* … */
    __pyx_L3_continue:;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+04571:         if _dataframe_is_null_pyobj(<PyObject*>cell):
    __pyx_t_6 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(((PyObject *)__pyx_v_cell));
    if (__pyx_t_6) {
/* … */
    }
+04572:             continue
      goto __pyx_L3_continue;
+04573:         if not PyArray_CheckExact(<PyObject*>cell):
    __pyx_t_6 = (!PyArray_CheckExact(((PyObject *)__pyx_v_cell)));
    if (unlikely(__pyx_t_6)) {
/* … */
    }
+04574:             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(0, 4574, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
+04575:                 QuestDBErrorCode.BadDataFrame,
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4575, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4575, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+04576:                 f'Bad column {col_name!r}: mixed object cells; expected '
      __pyx_t_8 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4576, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
/* … */
      __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_12, 5, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8) + 76 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_11) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_11));
      if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4576, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_13 = 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_13 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_9, __pyx_t_10};
        __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_13, (3-__pyx_t_13) | (__pyx_t_13*__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_10); __pyx_t_10 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4574, __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(0, 4574, __pyx_L1_error)
 04577:                 f'every non-null cell to be a numpy array, got '
+04578:                 f'{_fqn(type(cell))}.')
      __pyx_t_10 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_cell)))); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4578, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyUnicode_Unicode(__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4578, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_12[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
      __pyx_t_12[1] = __pyx_t_8;
      __pyx_t_12[2] = __pyx_mstate_global->__pyx_kp_u_mixed_object_cells_expected_eve;
      __pyx_t_12[3] = __pyx_t_11;
      __pyx_t_12[4] = __pyx_mstate_global->__pyx_kp_u__2;
+04579:         arr = <PyArrayObject*>cell
    __pyx_v_arr = ((PyArrayObject *)__pyx_v_cell);
+04580:         if PyArray_TYPE(arr) != NPY_DOUBLE:
    __pyx_t_6 = (PyArray_TYPE(__pyx_v_arr) != NPY_DOUBLE);
    if (unlikely(__pyx_t_6)) {
/* … */
    }
+04581:             raise QuestDBError(
      __pyx_t_7 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4581, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
+04582:                 QuestDBErrorCode.ArrayError,
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4582, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_ArrayError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4582, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+04583:                 f'Bad column {col_name!r}: Only float64 numpy arrays are '
      __pyx_t_9 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4583, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
/* … */
      __pyx_t_11 = __Pyx_PyUnicode_Join(__pyx_t_14, 4, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9) + 54 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8));
      if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4583, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_13 = 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_13 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_1, __pyx_t_11};
        __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_10, __pyx_callargs+__pyx_t_13, (3-__pyx_t_13) | (__pyx_t_13*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4581, __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(0, 4581, __pyx_L1_error)
+04584:                 f'supported, got dtype: {cell.dtype}')
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_cell, __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4584, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_8 = __Pyx_PyObject_FormatSimple(__pyx_t_11, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4584, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_14[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
      __pyx_t_14[1] = __pyx_t_9;
      __pyx_t_14[2] = __pyx_mstate_global->__pyx_kp_u_Only_float64_numpy_arrays_are_s;
      __pyx_t_14[3] = __pyx_t_8;
+04585:         if PyArray_NDIM(arr) > 1:
    __pyx_t_6 = (PyArray_NDIM(__pyx_v_arr) > 1);
    if (__pyx_t_6) {
/* … */
    }
+04586:             nested = True
      __pyx_v_nested = 1;
+04587:     if not nested:
  __pyx_t_6 = (!__pyx_v_nested);
  if (__pyx_t_6) {
/* … */
  }
+04588:         return _PYARROW.Array.from_pandas(series)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_Array); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4588, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_2 = __pyx_t_10;
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_13 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_series};
      __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_pandas, __pyx_callargs+__pyx_t_13, (2-__pyx_t_13) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4588, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
 04589:     # pyarrow cannot convert multi-dimensional ndarray cells directly
 04590:     # ("Can only convert 1-dimensional array values"); nested python
 04591:     # lists infer to the equivalent nested list<...<double>>.
+04592:     return _PYARROW.array([
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_10 = __pyx_v_7questdb_7_client__PYARROW;
  __Pyx_INCREF(__pyx_t_10);
  { /* enter inner scope */
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4592, __pyx_L13_error)
    __Pyx_GOTREF(__pyx_t_2);
+04593:         None if _dataframe_is_null_pyobj(<PyObject*>cell) else cell.tolist()
      __pyx_t_6 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(((PyObject *)__pyx_9genexpr17__pyx_v_cell));
      if (__pyx_t_6) {
        __Pyx_INCREF(Py_None);
        __pyx_t_1 = Py_None;
      } else {
        __pyx_t_8 = __pyx_9genexpr17__pyx_v_cell;
        __Pyx_INCREF(__pyx_t_8);
        __pyx_t_13 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL};
          __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_tolist, __pyx_callargs+__pyx_t_13, (1-__pyx_t_13) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4593, __pyx_L13_error)
          __Pyx_GOTREF(__pyx_t_7);
        }
        __pyx_t_1 = __pyx_t_7;
        __pyx_t_7 = 0;
      }
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_1))) __PYX_ERR(0, 4592, __pyx_L13_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+04594:         for cell in series])
    if (likely(PyList_CheckExact(__pyx_v_series)) || PyTuple_CheckExact(__pyx_v_series)) {
      __pyx_t_11 = __pyx_v_series; __Pyx_INCREF(__pyx_t_11);
      __pyx_t_4 = 0;
      __pyx_t_5 = NULL;
    } else {
      __pyx_t_4 = -1; __pyx_t_11 = PyObject_GetIter(__pyx_v_series); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4594, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_11); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4594, __pyx_L13_error)
    }
    for (;;) {
      if (likely(!__pyx_t_5)) {
        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(0, 4594, __pyx_L13_error)
            #endif
            if (__pyx_t_4 >= __pyx_temp) break;
          }
          __pyx_t_1 = __Pyx_PyList_GetItemRefFast(__pyx_t_11, __pyx_t_4, __Pyx_ReferenceSharing_OwnStrongReference);
          ++__pyx_t_4;
        } 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(0, 4594, __pyx_L13_error)
            #endif
            if (__pyx_t_4 >= __pyx_temp) break;
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_11, __pyx_t_4));
          #else
          __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_11, __pyx_t_4);
          #endif
          ++__pyx_t_4;
        }
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4594, __pyx_L13_error)
      } else {
        __pyx_t_1 = __pyx_t_5(__pyx_t_11);
        if (unlikely(!__pyx_t_1)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 4594, __pyx_L13_error)
            PyErr_Clear();
          }
          break;
        }
      }
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_9genexpr17__pyx_v_cell, __pyx_t_1);
      __pyx_t_1 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_XDECREF(__pyx_9genexpr17__pyx_v_cell); __pyx_9genexpr17__pyx_v_cell = 0;
    goto __pyx_L17_exit_scope;
    __pyx_L13_error:;
    __Pyx_XDECREF(__pyx_9genexpr17__pyx_v_cell); __pyx_9genexpr17__pyx_v_cell = 0;
    goto __pyx_L1_error;
    __pyx_L17_exit_scope:;
  } /* exit inner scope */
  __pyx_t_13 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_t_2};
    __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_array, __pyx_callargs+__pyx_t_13, (2-__pyx_t_13) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4592, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 04595: 
 04596: 
+04597: cdef object _dataframe_columnar_col_from_pandas(object df, col_t* col):
static PyObject *__pyx_f_7questdb_7_client__dataframe_columnar_col_from_pandas(PyObject *__pyx_v_df, struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col) {
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_v_col_name = NULL;
  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(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_AddTraceback("questdb._client._dataframe_columnar_col_from_pandas", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_col_name);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 04598:     # Re-export a pandas column as a pyarrow Array: pyarrow infers the
 04599:     # Arrow type (decimal width/scale, timestamp unit, ...) and carries a
 04600:     # validity bitmap for nulls, which the Rust Arrow importer then encodes.
+04601:     try:
  {
    /*try:*/ {
/* … */
    }
    __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_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 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;
  }
+04602:         return _PYARROW.Array.from_pandas(df.iloc[:, col.setup.orig_index])
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_Array); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4602, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_5 = __pyx_t_6;
      __Pyx_INCREF(__pyx_t_5);
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4602, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = __Pyx_PyLong_FromSize_t(__pyx_v_col->setup->orig_index); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4602, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4602, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_INCREF(__pyx_mstate_global->__pyx_slice[0]);
      __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[0]);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_mstate_global->__pyx_slice[0]) != (0)) __PYX_ERR(0, 4602, __pyx_L3_error);
      __Pyx_GIVEREF(__pyx_t_8);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_8) != (0)) __PYX_ERR(0, 4602, __pyx_L3_error);
      __pyx_t_8 = 0;
      __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4602, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_10 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_8};
        __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_pandas, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (1*__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_4)) __PYX_ERR(0, 4602, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      __pyx_r = __pyx_t_4;
      __pyx_t_4 = 0;
      goto __pyx_L7_try_return;
+04603:     except (TypeError, ValueError) as e:
    __pyx_t_11 = __Pyx_PyErr_ExceptionMatches2(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), ((PyObject *)(((PyTypeObject*)PyExc_ValueError))));
    if (__pyx_t_11) {
      __Pyx_AddTraceback("questdb._client._dataframe_columnar_col_from_pandas", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_6, &__pyx_t_8) < 0) __PYX_ERR(0, 4603, __pyx_L5_except_error)
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_v_e = __pyx_t_6;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L14_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_12); __pyx_t_12 = 0;
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 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_11 = __pyx_lineno; __pyx_t_17 = __pyx_clineno; __pyx_t_18 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_e); __pyx_v_e = 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_11; __pyx_clineno = __pyx_t_17; __pyx_filename = __pyx_t_18;
          goto __pyx_L5_except_error;
        }
      }
    }
    goto __pyx_L5_except_error;
+04604:         col_name = df.columns[col.setup.orig_index]
        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4604, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_5, __pyx_v_col->setup->orig_index, size_t, 0, __Pyx_PyLong_FromSize_t, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4604, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_v_col_name = __pyx_t_9;
        __pyx_t_9 = 0;
+04605:         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(0, 4605, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_7);
+04606:             QuestDBErrorCode.BadDataFrame,
        __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4606, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4606, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_13);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+04607:             f'Bad column {col_name!r}: {e}') from e
        __pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4607, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_14 = __Pyx_PyObject_FormatSimple(__pyx_v_e, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4607, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_14);
        __pyx_t_15[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
        __pyx_t_15[1] = __pyx_t_12;
        __pyx_t_15[2] = __pyx_mstate_global->__pyx_kp_u_;
        __pyx_t_15[3] = __pyx_t_14;
        __pyx_t_16 = __Pyx_PyUnicode_Join(__pyx_t_15, 4, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14));
        if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4607, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_16);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __pyx_t_10 = 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_10 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_13, __pyx_t_16};
          __pyx_t_9 = __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_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4605, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_9);
        }
        __Pyx_Raise(__pyx_t_9, 0, 0, __pyx_v_e);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __PYX_ERR(0, 4605, __pyx_L14_error)
      }
 04608: 
 04609: 
+04610: cdef void_int _dataframe_columnar_promote_cols(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_promote_cols(PyObject *__pyx_v_df, struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan) {
  size_t __pyx_v_col_index;
  struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col;
  struct ArrowArray *__pyx_v_chunk;
  PyObject *__pyx_v_arrow_array = 0;
  __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_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("questdb._client._dataframe_columnar_promote_cols", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_arrow_array);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 04611:         object df,
 04612:         dataframe_plan_t* plan) except -1:
 04613:     # Some column shapes have no contiguous native buffer the columnar wire
 04614:     # can emit directly. Re-export each as an Arrow array and let the Rust
 04615:     # Arrow importer classify it — the same route the all-Arrow capsule path
 04616:     # takes:
 04617:     #   - object-dtype numpy-array cells -> list<double> (ARRAY(DOUBLE));
 04618:     #   - object-dtype Decimal -> DECIMAL (width/scale inferred);
 04619:     #   - datetime64[ns] timestamp fields carrying NaT, whose INT64_MIN null
 04620:     #     sentinel the zero-copy ns->us path would corrupt into a 1677 value.
 04621:     cdef size_t col_index
 04622:     cdef col_t* col
 04623:     cdef ArrowArray* chunk
 04624:     cdef object arrow_array
+04625:     for col_index in range(plan.col_count):
  __pyx_t_1 = __pyx_v_plan->col_count;
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_col_index = __pyx_t_3;
+04626:         col = &plan.cols.d[col_index]
    __pyx_v_col = (&(__pyx_v_plan->cols.d[__pyx_v_col_index]));
+04627:         if col.setup.source == col_source_t.col_source_arr_f64_numpyobj:
    __pyx_t_4 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_arr_f64_numpyobj);
    if (__pyx_t_4) {
/* … */
      goto __pyx_L5;
    }
+04628:             _dataframe_require_pyarrow()
      __pyx_t_5 = __pyx_f_7questdb_7_client__dataframe_require_pyarrow(); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4628, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+04629:             arrow_array = _dataframe_columnar_ndarray_col_to_arrow(df, col)
      __pyx_t_5 = __pyx_f_7questdb_7_client__dataframe_columnar_ndarray_col_to_arrow(__pyx_v_df, __pyx_v_col); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4629, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_XDECREF_SET(__pyx_v_arrow_array, __pyx_t_5);
      __pyx_t_5 = 0;
+04630:         elif col.setup.source == col_source_t.col_source_decimal_pyobj:
    __pyx_t_4 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_decimal_pyobj);
    if (__pyx_t_4) {
/* … */
      goto __pyx_L5;
    }
+04631:             if not _dataframe_try_import_pyarrow():
      __pyx_t_4 = __pyx_f_7questdb_7_client__dataframe_try_import_pyarrow(); if (unlikely(__pyx_t_4 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4631, __pyx_L1_error)
      __pyx_t_6 = (!__pyx_t_4);
      if (__pyx_t_6) {
/* … */
      }
+04632:                 continue
        goto __pyx_L3_continue;
+04633:             arrow_array = _dataframe_columnar_col_from_pandas(df, col)
      __pyx_t_5 = __pyx_f_7questdb_7_client__dataframe_columnar_col_from_pandas(__pyx_v_df, __pyx_v_col); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4633, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_XDECREF_SET(__pyx_v_arrow_array, __pyx_t_5);
      __pyx_t_5 = 0;
+04634:         elif (col.setup.target == col_target_t.col_target_column_ts
    __pyx_t_4 = (__pyx_v_col->setup->target == __pyx_e_7questdb_7_client_col_target_column_ts);
    if (__pyx_t_4) {
    } else {
      __pyx_t_6 = __pyx_t_4;
      goto __pyx_L7_bool_binop_done;
    }
/* … */
    if (__pyx_t_6) {
/* … */
      goto __pyx_L5;
    }
+04635:                 and col.setup.source == col_source_t.col_source_dt64ns_numpy
    __pyx_t_4 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_dt64ns_numpy);
    if (__pyx_t_4) {
    } else {
      __pyx_t_6 = __pyx_t_4;
      goto __pyx_L7_bool_binop_done;
    }
+04636:                 and _dataframe_columnar_has_single_contiguous_chunk(
    __pyx_t_4 = __pyx_f_7questdb_7_client__dataframe_columnar_has_single_contiguous_chunk(__pyx_v_col, __pyx_v_plan->row_count);
    if (__pyx_t_4) {
    } else {
      __pyx_t_6 = __pyx_t_4;
      goto __pyx_L7_bool_binop_done;
    }
 04637:                     col, plan.row_count)
+04638:                 and _dataframe_columnar_col_has_nat(col, plan.row_count)):
    __pyx_t_4 = __pyx_f_7questdb_7_client__dataframe_columnar_col_has_nat(__pyx_v_col, __pyx_v_plan->row_count);
    __pyx_t_6 = __pyx_t_4;
    __pyx_L7_bool_binop_done:;
+04639:             if not _dataframe_try_import_pyarrow():
      __pyx_t_6 = __pyx_f_7questdb_7_client__dataframe_try_import_pyarrow(); if (unlikely(__pyx_t_6 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4639, __pyx_L1_error)
      __pyx_t_4 = (!__pyx_t_6);
      if (__pyx_t_4) {
/* … */
      }
+04640:                 continue
        goto __pyx_L3_continue;
+04641:             arrow_array = _dataframe_columnar_col_from_pandas(df, col)
      __pyx_t_5 = __pyx_f_7questdb_7_client__dataframe_columnar_col_from_pandas(__pyx_v_df, __pyx_v_col); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4641, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_XDECREF_SET(__pyx_v_arrow_array, __pyx_t_5);
      __pyx_t_5 = 0;
 04642:         else:
+04643:             continue
    /*else*/ {
      goto __pyx_L3_continue;
    }
    __pyx_L5:;
+04644:         chunk = &col.setup.chunks.chunks[0]
    __pyx_v_chunk = (&(__pyx_v_col->setup->chunks.chunks[0]));
+04645:         if chunk.release != NULL:
    __pyx_t_4 = (__pyx_v_chunk->release != NULL);
    if (__pyx_t_4) {
/* … */
    }
+04646:             chunk.release(chunk)
      __pyx_v_chunk->release(__pyx_v_chunk);
+04647:         memset(chunk, 0, sizeof(ArrowArray))
    (void)(memset(__pyx_v_chunk, 0, (sizeof(struct ArrowArray))));
+04648:         if col.setup.arrow_schema.release != NULL:
    __pyx_t_4 = (__pyx_v_col->setup->arrow_schema.release != NULL);
    if (__pyx_t_4) {
/* … */
    }
+04649:             col.setup.arrow_schema.release(&col.setup.arrow_schema)
      __pyx_v_col->setup->arrow_schema.release((&__pyx_v_col->setup->arrow_schema));
+04650:         arrow_array._export_to_c(
    __pyx_t_7 = __pyx_v_arrow_array;
    __Pyx_INCREF(__pyx_t_7);
+04651:             <uintptr_t>chunk, <uintptr_t>&col.setup.arrow_schema)
    __pyx_t_8 = __Pyx_PyLong_FromSize_t(((uintptr_t)__pyx_v_chunk)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4651, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = __Pyx_PyLong_FromSize_t(((uintptr_t)(&__pyx_v_col->setup->arrow_schema))); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4651, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_10 = 0;
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_8, __pyx_t_9};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_export_to_c, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (1*__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_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4650, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+04652:         col.setup.source = col_source_t.col_source_arrow_passthrough
    __pyx_v_col->setup->source = __pyx_e_7questdb_7_client_col_source_arrow_passthrough;
+04653:         col.setup.target = col_target_t.col_target_column_arrow
    __pyx_v_col->setup->target = __pyx_e_7questdb_7_client_col_target_column_arrow;
    __pyx_L3_continue:;
  }
 04654: 
 04655: 
+04656: cdef bint _is_pyobj_source(col_source_t source) noexcept nogil:
static int __pyx_f_7questdb_7_client__is_pyobj_source(enum __pyx_t_7questdb_7_client_col_source_t __pyx_v_source) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 04657:     return (
+04658:         source == col_source_t.col_source_str_pyobj or
  switch (__pyx_v_source) {
    case __pyx_e_7questdb_7_client_col_source_str_pyobj:
    case __pyx_e_7questdb_7_client_col_source_int_pyobj:
/* … */
    __pyx_t_1 = 1;
    break;
    default:
    __pyx_t_1 = 0;
    break;
  }
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
+04659:         source == col_source_t.col_source_int_pyobj or
    case __pyx_e_7questdb_7_client_col_source_float_pyobj:
+04660:         source == col_source_t.col_source_float_pyobj or
    case __pyx_e_7questdb_7_client_col_source_bool_pyobj:
+04661:         source == col_source_t.col_source_bool_pyobj or
    case __pyx_e_7questdb_7_client_col_source_uuid_pyobj:
+04662:         source == col_source_t.col_source_uuid_pyobj or
    case __pyx_e_7questdb_7_client_col_source_ipv4_pyobj:
+04663:         source == col_source_t.col_source_ipv4_pyobj or
    case __pyx_e_7questdb_7_client_col_source_datetime_pyobj:
+04664:         source == col_source_t.col_source_datetime_pyobj or
    case __pyx_e_7questdb_7_client_col_source_bytes_pyobj:
 04665:         source == col_source_t.col_source_bytes_pyobj)
 04666: 
 04667: 
+04668: cdef inline void _pyobj_set_validity_bit(uint8_t* bitmap, size_t row) noexcept nogil:
static CYTHON_INLINE void __pyx_f_7questdb_7_client__pyobj_set_validity_bit(uint8_t *__pyx_v_bitmap, size_t __pyx_v_row) {
/* … */
  /* function exit code */
}
+04669:     bitmap[row >> 3] |= <uint8_t>(1 << (row & 7))
  __pyx_t_1 = (__pyx_v_row >> 3);
  (__pyx_v_bitmap[__pyx_t_1]) = ((__pyx_v_bitmap[__pyx_t_1]) | ((uint8_t)(1 << (__pyx_v_row & 7))));
 04670: 
 04671: 
+04672: cdef pyobj_built_t* _dataframe_columnar_build_str_pyobj(
static struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_f_7questdb_7_client__dataframe_columnar_build_str_pyobj(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count, PyObject *__pyx_v_df_col_name) {
  struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_b;
  PyObject **__pyx_v_access;
  PyObject *__pyx_v_cell;
  PyObject *__pyx_v_cell_ref = 0;
  size_t __pyx_v_i;
  Py_ssize_t __pyx_v_utf8_len;
  char const *__pyx_v_utf8_buf;
  size_t __pyx_v_validity_bytes;
  size_t __pyx_v_bytes_cap;
  uint8_t *__pyx_v_new_bytes;
  size_t __pyx_v_bytes_used;
  struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_AddTraceback("questdb._client._dataframe_columnar_build_str_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_cell_ref);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 04673:         col_t* col,
 04674:         size_t row_count,
 04675:         object df_col_name) except NULL:
 04676:     """
 04677:     Walk a PyObject column once and produce Arrow-Utf8-shaped buffers
 04678:     (int32 offsets + uint8 bytes + LSB-packed validity). Encoding uses
 04679:     CPython's `PyUnicode_AsUTF8AndSize`, which rejects lone surrogates,
 04680:     so every emitted buffer is valid UTF-8.
 04681:     """
+04682:     cdef pyobj_built_t* b = <pyobj_built_t*>calloc(1, sizeof(pyobj_built_t))
  __pyx_v_b = ((struct __pyx_t_7questdb_7_client_pyobj_built_t *)calloc(1, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t))));
+04683:     if b == NULL:
  __pyx_t_1 = (__pyx_v_b == NULL);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+04684:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 4684, __pyx_L1_error)
+04685:     b.row_count = row_count
  __pyx_v_b->row_count = __pyx_v_row_count;
 04686: 
+04687:     cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
  __pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
 04688:     cdef PyObject* cell
 04689:     # Owns the cell for as long as `cell` points at it. Code the cell
 04690:     # runs while it is read, such as a `__class__` lookup inside
 04691:     # `isinstance` or a property, can replace it in the frame's array
 04692:     # and so drop the array's reference to it.
 04693:     cdef object cell_ref
 04694:     cdef size_t i
 04695:     cdef Py_ssize_t utf8_len
 04696:     cdef const char* utf8_buf
+04697:     cdef size_t validity_bytes = (row_count + 7) // 8
  __pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
+04698:     cdef size_t bytes_cap = 16
  __pyx_v_bytes_cap = 16;
 04699:     cdef uint8_t* new_bytes
+04700:     cdef size_t bytes_used = 0
  __pyx_v_bytes_used = 0;
 04701: 
+04702:     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_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_15); __pyx_t_15 = 0;
    __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
    __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 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_L9_try_end:;
  }
+04703:         b.str_offsets = <int32_t*>calloc(row_count + 1, sizeof(int32_t))
      __pyx_v_b->str_offsets = ((int32_t *)calloc((__pyx_v_row_count + 1), (sizeof(int32_t))));
+04704:         if b.str_offsets == NULL:
      __pyx_t_1 = (__pyx_v_b->str_offsets == NULL);
      if (unlikely(__pyx_t_1)) {
/* … */
      }
+04705:             raise MemoryError()
        PyErr_NoMemory(); __PYX_ERR(0, 4705, __pyx_L4_error)
+04706:         if validity_bytes > 0:
      __pyx_t_1 = (__pyx_v_validity_bytes > 0);
      if (__pyx_t_1) {
/* … */
      }
+04707:             b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
        __pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+04708:             if b.validity == NULL:
        __pyx_t_1 = (__pyx_v_b->validity == NULL);
        if (unlikely(__pyx_t_1)) {
/* … */
        }
+04709:                 raise MemoryError()
          PyErr_NoMemory(); __PYX_ERR(0, 4709, __pyx_L4_error)
+04710:         b.str_bytes = <uint8_t*>malloc(bytes_cap)
      __pyx_v_b->str_bytes = ((uint8_t *)malloc(__pyx_v_bytes_cap));
+04711:         if b.str_bytes == NULL:
      __pyx_t_1 = (__pyx_v_b->str_bytes == NULL);
      if (unlikely(__pyx_t_1)) {
/* … */
      }
+04712:             raise MemoryError()
        PyErr_NoMemory(); __PYX_ERR(0, 4712, __pyx_L4_error)
 04713: 
+04714:         for i in range(row_count):
      __pyx_t_5 = __pyx_v_row_count;
      __pyx_t_6 = __pyx_t_5;
      for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
        __pyx_v_i = __pyx_t_7;
+04715:             cell_ref = <object>access[i]
        __pyx_t_8 = ((PyObject *)(__pyx_v_access[__pyx_v_i]));
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_XDECREF_SET(__pyx_v_cell_ref, __pyx_t_8);
        __pyx_t_8 = 0;
+04716:             cell = <PyObject*>cell_ref
        __pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+04717:             if PyUnicode_CheckExact(cell):
        __pyx_t_1 = PyUnicode_CheckExact(__pyx_v_cell);
        if (__pyx_t_1) {
/* … */
          goto __pyx_L16;
        }
+04718:                 utf8_buf = PyUnicode_AsUTF8AndSize(cell, &utf8_len)
          __pyx_t_9 = PyUnicode_AsUTF8AndSize(__pyx_v_cell, (&__pyx_v_utf8_len)); if (unlikely(__pyx_t_9 == ((void *)NULL))) __PYX_ERR(0, 4718, __pyx_L4_error)
          __pyx_v_utf8_buf = __pyx_t_9;
+04719:                 if bytes_used + <size_t>utf8_len > <size_t>2_147_483_647:
          __pyx_t_1 = ((__pyx_v_bytes_used + ((size_t)__pyx_v_utf8_len)) > ((size_t)0x7FFFFFFF));
          if (unlikely(__pyx_t_1)) {
/* … */
          }
+04720:                     raise QuestDBError(
            __pyx_t_10 = NULL;
            __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4720, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_11);
+04721:                         QuestDBErrorCode.BadDataFrame,
            __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4721, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_12);
            __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4721, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_13);
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+04722:                         f'Bad column {df_col_name!r}: column total UTF-8 '
            __pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4722, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_12);
            __pyx_t_14[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
            __pyx_t_14[1] = __pyx_t_12;
            __pyx_t_14[2] = __pyx_mstate_global->__pyx_kp_u_column_total_UTF_8_bytes_exceed;
            __pyx_t_15 = __Pyx_PyUnicode_Join(__pyx_t_14, 3, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12) + 83, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12));
            if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4722, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
            __pyx_t_16 = 1;
            #if CYTHON_UNPACK_METHODS
            if (unlikely(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_16 = 0;
            }
            #endif
            {
              PyObject *__pyx_callargs[3] = {__pyx_t_10, __pyx_t_13, __pyx_t_15};
              __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_16, (3-__pyx_t_16) | (__pyx_t_16*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
              __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
              __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
              if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4720, __pyx_L4_error)
              __Pyx_GOTREF(__pyx_t_8);
            }
            __Pyx_Raise(__pyx_t_8, 0, 0, 0);
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            __PYX_ERR(0, 4720, __pyx_L4_error)
 04723:                         'bytes exceeds the QWP wire varchar offset table '
 04724:                         'limit (2 GiB).')
+04725:                 while bytes_used + <size_t>utf8_len > bytes_cap:
          while (1) {
            __pyx_t_1 = ((__pyx_v_bytes_used + ((size_t)__pyx_v_utf8_len)) > __pyx_v_bytes_cap);
            if (!__pyx_t_1) break;
+04726:                     bytes_cap *= 2
            __pyx_v_bytes_cap = (__pyx_v_bytes_cap * 2);
+04727:                     new_bytes = <uint8_t*>realloc(b.str_bytes, bytes_cap)
            __pyx_v_new_bytes = ((uint8_t *)realloc(__pyx_v_b->str_bytes, __pyx_v_bytes_cap));
+04728:                     if new_bytes == NULL:
            __pyx_t_1 = (__pyx_v_new_bytes == NULL);
            if (unlikely(__pyx_t_1)) {
/* … */
            }
+04729:                         raise MemoryError()
              PyErr_NoMemory(); __PYX_ERR(0, 4729, __pyx_L4_error)
+04730:                     b.str_bytes = new_bytes
            __pyx_v_b->str_bytes = __pyx_v_new_bytes;
          }
+04731:                 if utf8_len > 0:
          __pyx_t_1 = (__pyx_v_utf8_len > 0);
          if (__pyx_t_1) {
/* … */
          }
+04732:                     memcpy(b.str_bytes + bytes_used, utf8_buf, <size_t>utf8_len)
            (void)(memcpy((__pyx_v_b->str_bytes + __pyx_v_bytes_used), __pyx_v_utf8_buf, ((size_t)__pyx_v_utf8_len)));
+04733:                 bytes_used += <size_t>utf8_len
          __pyx_v_bytes_used = (__pyx_v_bytes_used + ((size_t)__pyx_v_utf8_len));
+04734:                 b.str_offsets[i + 1] = <int32_t>bytes_used
          (__pyx_v_b->str_offsets[(__pyx_v_i + 1)]) = ((int32_t)__pyx_v_bytes_used);
+04735:                 if b.validity != NULL:
          __pyx_t_1 = (__pyx_v_b->validity != NULL);
          if (__pyx_t_1) {
/* … */
          }
+04736:                     _pyobj_set_validity_bit(b.validity, i)
            __pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
+04737:             elif _dataframe_is_null_pyobj(cell):
        __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(__pyx_v_cell);
        if (likely(__pyx_t_1)) {
/* … */
          goto __pyx_L16;
        }
+04738:                 b.str_offsets[i + 1] = <int32_t>bytes_used
          (__pyx_v_b->str_offsets[(__pyx_v_i + 1)]) = ((int32_t)__pyx_v_bytes_used);
+04739:                 b.has_nulls = True
          __pyx_v_b->has_nulls = 1;
 04740:             else:
+04741:                 raise QuestDBError(
        /*else*/ {
          __pyx_t_11 = NULL;
          __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4741, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_15);
+04742:                     QuestDBErrorCode.BadDataFrame,
          __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4742, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4742, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+04743:                     f'Bad column {df_col_name!r} at row {i}: expected str, '
          __pyx_t_13 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4743, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_12 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4743, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_12);
/* … */
          __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_19, 7, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13) + 8 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12) + 20 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18));
          if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4743, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_17);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __pyx_t_16 = 1;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(PyMethod_Check(__pyx_t_15))) {
            __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_15);
            assert(__pyx_t_11);
            PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_15);
            __Pyx_INCREF(__pyx_t_11);
            __Pyx_INCREF(__pyx__function);
            __Pyx_DECREF_SET(__pyx_t_15, __pyx__function);
            __pyx_t_16 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_11, __pyx_t_10, __pyx_t_17};
            __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_15, __pyx_callargs+__pyx_t_16, (3-__pyx_t_16) | (__pyx_t_16*__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_17); __pyx_t_17 = 0;
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4741, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_8);
          }
          __Pyx_Raise(__pyx_t_8, 0, 0, 0);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __PYX_ERR(0, 4741, __pyx_L4_error)
        }
        __pyx_L16:;
      }
+04744:                     f'got {_fqn(type(<object>cell))}.')
          __pyx_t_17 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4744, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_17);
          __pyx_t_18 = __Pyx_PyUnicode_Unicode(__pyx_t_17); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4744, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __pyx_t_19[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
          __pyx_t_19[1] = __pyx_t_13;
          __pyx_t_19[2] = __pyx_mstate_global->__pyx_kp_u_at_row;
          __pyx_t_19[3] = __pyx_t_12;
          __pyx_t_19[4] = __pyx_mstate_global->__pyx_kp_u_expected_str_got;
          __pyx_t_19[5] = __pyx_t_18;
          __pyx_t_19[6] = __pyx_mstate_global->__pyx_kp_u__2;
 04745: 
+04746:         b.str_bytes_len = bytes_used
      __pyx_v_b->str_bytes_len = __pyx_v_bytes_used;
 04747: 
 04748:         # If the column turned out to be all-valid, drop the bitmap so
 04749:         # the FFI takes the no-validity hot path.
+04750:         if not b.has_nulls and b.validity != NULL:
      __pyx_t_20 = (!__pyx_v_b->has_nulls);
      if (__pyx_t_20) {
      } else {
        __pyx_t_1 = __pyx_t_20;
        goto __pyx_L24_bool_binop_done;
      }
      __pyx_t_20 = (__pyx_v_b->validity != NULL);
      __pyx_t_1 = __pyx_t_20;
      __pyx_L24_bool_binop_done:;
      if (__pyx_t_1) {
/* … */
      }
+04751:             free(b.validity)
        free(__pyx_v_b->validity);
+04752:             b.validity = NULL
        __pyx_v_b->validity = NULL;
+04753:     except:
    /*except:*/ {
      __Pyx_AddTraceback("questdb._client._dataframe_columnar_build_str_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_15, &__pyx_t_17) < 0) __PYX_ERR(0, 4753, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_15);
      __Pyx_XGOTREF(__pyx_t_17);
+04754:         pyobj_built_free(b)
      __pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+04755:         raise
      __Pyx_GIVEREF(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_15);
      __Pyx_XGIVEREF(__pyx_t_17);
      __Pyx_ErrRestoreWithState(__pyx_t_8, __pyx_t_15, __pyx_t_17);
      __pyx_t_8 = 0;  __pyx_t_15 = 0;  __pyx_t_17 = 0; 
      __PYX_ERR(0, 4755, __pyx_L6_except_error)
    }
 04756: 
+04757:     return b
  __pyx_r = __pyx_v_b;
  goto __pyx_L0;
 04758: 
 04759: 
+04760: cdef pyobj_built_t* _dataframe_columnar_build_int_pyobj(
static struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_f_7questdb_7_client__dataframe_columnar_build_int_pyobj(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count, PyObject *__pyx_v_df_col_name) {
  struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_b;
  PyObject **__pyx_v_access;
  PyObject *__pyx_v_cell;
  PyObject *__pyx_v_cell_ref = 0;
  uint8_t *__pyx_v_values;
  size_t __pyx_v_validity_bytes;
  size_t __pyx_v_i;
  int64_t __pyx_v_value;
  int __pyx_v_overflow;
  size_t __pyx_v_elem_size;
  int64_t __pyx_v_narrow_max;
  PyObject *__pyx_v_narrow_type = 0;
  struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_8);
  __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_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_AddTraceback("questdb._client._dataframe_columnar_build_int_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_cell_ref);
  __Pyx_XDECREF(__pyx_v_narrow_type);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 04761:         col_t* col,
 04762:         size_t row_count,
 04763:         object df_col_name) except NULL:
 04764:     """
 04765:     Walk a PyObject int column once and produce a contiguous buffer +
 04766:     LSB-packed validity bitmap. Null cells leave the slot at 0 with the
 04767:     validity bit cleared.
 04768: 
 04769:     The slot is an int64 unless an IPV4 or CHAR round-trip claim
 04770:     narrows it to the 32- or 16-bit unsigned width that wire type
 04771:     needs; a GEOHASH claim keeps the int64 slot and carries its
 04772:     precision separately. Each is stored through its own pointer type,
 04773:     so the buffer holds native-order values whichever width it is.
 04774: 
 04775:     Null detection: ``None``, ``pd.NA``, and ``float('nan')`` all count
 04776:     as null — the NaN-as-null rule matches the row-path behaviour
 04777:     (`_dataframe_is_null_pyobj` in dataframe.pxi). A non-NaN float in
 04778:     an int-sniffed column raises ``QuestDBError`` with the row index;
 04779:     we accept the asymmetry because column-wide sniff has already
 04780:     locked the source type from the first non-null cell.
 04781:     """
+04782:     cdef pyobj_built_t* b = <pyobj_built_t*>calloc(1, sizeof(pyobj_built_t))
  __pyx_v_b = ((struct __pyx_t_7questdb_7_client_pyobj_built_t *)calloc(1, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t))));
+04783:     if b == NULL:
  __pyx_t_1 = (__pyx_v_b == NULL);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+04784:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 4784, __pyx_L1_error)
+04785:     b.row_count = row_count
  __pyx_v_b->row_count = __pyx_v_row_count;
 04786: 
+04787:     cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
  __pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
 04788:     cdef PyObject* cell
 04789:     # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
 04790:     cdef object cell_ref
+04791:     cdef uint8_t* values = NULL
  __pyx_v_values = NULL;
+04792:     cdef size_t validity_bytes = (row_count + 7) // 8
  __pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
 04793:     cdef size_t i
 04794:     cdef int64_t value
+04795:     cdef int overflow = 0
  __pyx_v_overflow = 0;
+04796:     cdef size_t elem_size = 8
  __pyx_v_elem_size = 8;
+04797:     cdef int64_t narrow_max = 0
  __pyx_v_narrow_max = 0;
+04798:     cdef str narrow_type = None
  __Pyx_INCREF(Py_None);
  __pyx_v_narrow_type = ((PyObject*)Py_None);
 04799: 
+04800:     if col.setup.has_override:
  if (__pyx_v_col->setup->has_override) {
/* … */
  }
+04801:         if col.setup.override_dtype == qwp_numpy_dtype.qwp_numpy_u32_ipv4:
    switch (__pyx_v_col->setup->override_dtype) {
      case qwp_numpy_u32_ipv4:
/* … */
      break;
      case qwp_numpy_u16_char:
+04802:             elem_size = 4
      __pyx_v_elem_size = 4;
+04803:             narrow_max = 0xFFFFFFFF
      __pyx_v_narrow_max = 0xFFFFFFFF;
+04804:             narrow_type = 'IPV4'
      __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_IPV4);
      __Pyx_DECREF_SET(__pyx_v_narrow_type, __pyx_mstate_global->__pyx_n_u_IPV4);
+04805:         elif col.setup.override_dtype == qwp_numpy_dtype.qwp_numpy_u16_char:
      break;
      default: break;
    }
+04806:             elem_size = 2
      __pyx_v_elem_size = 2;
+04807:             narrow_max = 0xFFFF
      __pyx_v_narrow_max = 0xFFFF;
+04808:             narrow_type = 'CHAR'
      __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_CHAR);
      __Pyx_DECREF_SET(__pyx_v_narrow_type, __pyx_mstate_global->__pyx_n_u_CHAR);
 04809:         # GEOHASH has no per-value range check here, by design. That is
 04810:         # the documented bulk GEOHASH contract (`QuestDB.dataframe`,
 04811:         # docs/sender.rst): every DataFrame input shape -- NumPy, Arrow
 04812:         # and this object route -- takes a value as a raw bit pattern,
 04813:         # checks only the precision and the carrier width, and leaves
 04814:         # the values to the caller. The native encoder follows the same
 04815:         # rule and writes the low ceil(precision / 8) bytes, so a value
 04816:         # with bits above the precision lands as a different GEOHASH or
 04817:         # as NULL.
 04818:         #
 04819:         # The check would cost nothing in this per-cell loop. It is left
 04820:         # out so that one frame gets one answer: a masked pandas column
 04821:         # arrives here as Python ints, and plain `to_pandas()` returns a
 04822:         # GEOHASH column as a masked column when it holds a null and as
 04823:         # a NumPy column when it does not. A check on this route alone
 04824:         # would refuse an edited frame whose column holds a null and
 04825:         # write the same frame without one. IPV4 and CHAR get a range
 04826:         # check because their NumPy and Arrow carriers, uint32 and
 04827:         # uint16, cannot hold an out-of-range value either, so it gives
 04828:         # this route the same range as theirs.
 04829:         #
 04830:         # `test_roundtrip_claim_forwards_arbitrary_geohash_values` pins
 04831:         # this on every shape. Changing it changes the public contract,
 04832:         # docs and CHANGELOG included; it is not a local fix.
 04833: 
+04834:     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_L10_try_end;
    __pyx_L5_error:;
    __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_14); __pyx_t_14 = 0;
    __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;
    __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 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_L10_try_end:;
  }
+04835:         values = <uint8_t*>calloc(
      __pyx_v_values = ((uint8_t *)calloc(__pyx_t_5, (sizeof(uint8_t))));
+04836:             row_count * elem_size if row_count > 0 else elem_size,
      __pyx_t_1 = (__pyx_v_row_count > 0);
      if (__pyx_t_1) {
        __pyx_t_5 = (__pyx_v_row_count * __pyx_v_elem_size);
      } else {
        __pyx_t_5 = __pyx_v_elem_size;
      }
 04837:             sizeof(uint8_t))
+04838:         if values == NULL:
      __pyx_t_1 = (__pyx_v_values == NULL);
      if (unlikely(__pyx_t_1)) {
/* … */
      }
+04839:             raise MemoryError()
        PyErr_NoMemory(); __PYX_ERR(0, 4839, __pyx_L5_error)
+04840:         b.data = <void*>values
      __pyx_v_b->data = ((void *)__pyx_v_values);
+04841:         if validity_bytes > 0:
      __pyx_t_1 = (__pyx_v_validity_bytes > 0);
      if (__pyx_t_1) {
/* … */
      }
+04842:             b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
        __pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+04843:             if b.validity == NULL:
        __pyx_t_1 = (__pyx_v_b->validity == NULL);
        if (unlikely(__pyx_t_1)) {
/* … */
        }
+04844:                 raise MemoryError()
          PyErr_NoMemory(); __PYX_ERR(0, 4844, __pyx_L5_error)
+04845:         for i in range(row_count):
      __pyx_t_5 = __pyx_v_row_count;
      __pyx_t_6 = __pyx_t_5;
      for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
        __pyx_v_i = __pyx_t_7;
+04846:             cell_ref = <object>access[i]
        __pyx_t_8 = ((PyObject *)(__pyx_v_access[__pyx_v_i]));
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_XDECREF_SET(__pyx_v_cell_ref, __pyx_t_8);
        __pyx_t_8 = 0;
+04847:             cell = <PyObject*>cell_ref
        __pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
 04848:             # PyBool_Check goes BEFORE PyLong_CheckExact because Python
 04849:             # bools are subclasses of int and PyLong_CheckExact returns
 04850:             # false for them; treat them as int (matches row-path).
+04851:             if PyBool_Check(cell):
        __pyx_t_1 = PyBool_Check(__pyx_v_cell);
        if (__pyx_t_1) {
/* … */
          goto __pyx_L16;
        }
+04852:                 value = 1 if cell == Py_True else 0
          __pyx_t_1 = (__pyx_v_cell == Py_True);
          if (__pyx_t_1) {
            __pyx_t_9 = 1;
          } else {
            __pyx_t_9 = 0;
          }
          __pyx_v_value = __pyx_t_9;
+04853:             elif PyLong_CheckExact(cell):
        __pyx_t_1 = PyLong_CheckExact(__pyx_v_cell);
        if (__pyx_t_1) {
/* … */
          goto __pyx_L16;
        }
+04854:                 value = <int64_t>PyLong_AsLongLongAndOverflow(
          __pyx_t_10 = PyLong_AsLongLongAndOverflow(((PyObject *)__pyx_v_cell), (&__pyx_v_overflow)); if (unlikely(__pyx_t_10 == ((PY_LONG_LONG)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 4854, __pyx_L5_error)
          __pyx_v_value = ((int64_t)__pyx_t_10);
 04855:                     <object>cell, &overflow)
+04856:                 if overflow != 0:
          __pyx_t_1 = (__pyx_v_overflow != 0);
          if (__pyx_t_1) {
/* … */
          }
+04857:                     if narrow_type is not None:
            __pyx_t_1 = (__pyx_v_narrow_type != ((PyObject*)Py_None));
            if (unlikely(__pyx_t_1)) {
/* … */
            }
+04858:                         raise QuestDBError(
              __pyx_t_11 = NULL;
              __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4858, __pyx_L5_error)
              __Pyx_GOTREF(__pyx_t_12);
+04859:                             QuestDBErrorCode.BadDataFrame,
              __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4859, __pyx_L5_error)
              __Pyx_GOTREF(__pyx_t_13);
              __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4859, __pyx_L5_error)
              __Pyx_GOTREF(__pyx_t_14);
              __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+04860:                             f'Bad column {df_col_name!r} at row {i}: '
              __pyx_t_13 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4860, __pyx_L5_error)
              __Pyx_GOTREF(__pyx_t_13);
              __pyx_t_15 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4860, __pyx_L5_error)
              __Pyx_GOTREF(__pyx_t_15);
/* … */
              __pyx_t_19 = __Pyx_PyUnicode_Join(__pyx_t_18, 9, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13) + 8 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16) + 34 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_16));
              if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4860, __pyx_L5_error)
              __Pyx_GOTREF(__pyx_t_19);
              __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
              __Pyx_DECREF(__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;
              __pyx_t_20 = 1;
              #if CYTHON_UNPACK_METHODS
              if (unlikely(PyMethod_Check(__pyx_t_12))) {
                __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_12);
                assert(__pyx_t_11);
                PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_12);
                __Pyx_INCREF(__pyx_t_11);
                __Pyx_INCREF(__pyx__function);
                __Pyx_DECREF_SET(__pyx_t_12, __pyx__function);
                __pyx_t_20 = 0;
              }
              #endif
              {
                PyObject *__pyx_callargs[3] = {__pyx_t_11, __pyx_t_14, __pyx_t_19};
                __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_12, __pyx_callargs+__pyx_t_20, (3-__pyx_t_20) | (__pyx_t_20*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
                __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
                __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
                __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
                __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
                if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4858, __pyx_L5_error)
                __Pyx_GOTREF(__pyx_t_8);
              }
              __Pyx_Raise(__pyx_t_8, 0, 0, 0);
              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
              __PYX_ERR(0, 4858, __pyx_L5_error)
+04861:                             f'{narrow_type} values must be in the range '
              __pyx_t_16 = __Pyx_PyUnicode_Unicode(__pyx_v_narrow_type); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4861, __pyx_L5_error)
              __Pyx_GOTREF(__pyx_t_16);
+04862:                             f'0 .. {narrow_max}.')
              __pyx_t_17 = __Pyx_PyUnicode_From_int64_t(__pyx_v_narrow_max, 0, ' ', 'd'); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4862, __pyx_L5_error)
              __Pyx_GOTREF(__pyx_t_17);
              __pyx_t_18[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
              __pyx_t_18[1] = __pyx_t_13;
              __pyx_t_18[2] = __pyx_mstate_global->__pyx_kp_u_at_row;
              __pyx_t_18[3] = __pyx_t_15;
              __pyx_t_18[4] = __pyx_mstate_global->__pyx_kp_u_;
              __pyx_t_18[5] = __pyx_t_16;
              __pyx_t_18[6] = __pyx_mstate_global->__pyx_kp_u_values_must_be_in_the_range_0;
              __pyx_t_18[7] = __pyx_t_17;
              __pyx_t_18[8] = __pyx_mstate_global->__pyx_kp_u__2;
+04863:                     if overflow < 0:
            __pyx_t_1 = (__pyx_v_overflow < 0);
            if (unlikely(__pyx_t_1)) {
/* … */
            }
+04864:                         raise QuestDBError(
              __pyx_t_12 = NULL;
              __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4864, __pyx_L5_error)
              __Pyx_GOTREF(__pyx_t_19);
+04865:                             QuestDBErrorCode.BadDataFrame,
              __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4865, __pyx_L5_error)
              __Pyx_GOTREF(__pyx_t_14);
              __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4865, __pyx_L5_error)
              __Pyx_GOTREF(__pyx_t_11);
              __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+04866:                             f'Bad column {df_col_name!r} at row {i}: '
              __pyx_t_14 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4866, __pyx_L5_error)
              __Pyx_GOTREF(__pyx_t_14);
              __pyx_t_17 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4866, __pyx_L5_error)
              __Pyx_GOTREF(__pyx_t_17);
              __pyx_t_21[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
              __pyx_t_21[1] = __pyx_t_14;
              __pyx_t_21[2] = __pyx_mstate_global->__pyx_kp_u_at_row;
              __pyx_t_21[3] = __pyx_t_17;
              __pyx_t_21[4] = __pyx_mstate_global->__pyx_kp_u_integer_is_below_the_minimum_fo;
              __pyx_t_16 = __Pyx_PyUnicode_Join(__pyx_t_21, 5, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14) + 8 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17) + 112, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14));
              if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4866, __pyx_L5_error)
              __Pyx_GOTREF(__pyx_t_16);
              __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
              __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
              __pyx_t_20 = 1;
              #if CYTHON_UNPACK_METHODS
              if (unlikely(PyMethod_Check(__pyx_t_19))) {
                __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_19);
                assert(__pyx_t_12);
                PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_19);
                __Pyx_INCREF(__pyx_t_12);
                __Pyx_INCREF(__pyx__function);
                __Pyx_DECREF_SET(__pyx_t_19, __pyx__function);
                __pyx_t_20 = 0;
              }
              #endif
              {
                PyObject *__pyx_callargs[3] = {__pyx_t_12, __pyx_t_11, __pyx_t_16};
                __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_19, __pyx_callargs+__pyx_t_20, (3-__pyx_t_20) | (__pyx_t_20*__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_16); __pyx_t_16 = 0;
                __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
                if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4864, __pyx_L5_error)
                __Pyx_GOTREF(__pyx_t_8);
              }
              __Pyx_Raise(__pyx_t_8, 0, 0, 0);
              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
              __PYX_ERR(0, 4864, __pyx_L5_error)
 04867:                             f'integer is below the minimum for a LONG '
 04868:                             f'column (-2**63). LONG256 is unsigned and '
 04869:                             f'cannot store negative values.')
+04870:                     raise QuestDBError(
            __pyx_t_19 = NULL;
            __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4870, __pyx_L5_error)
            __Pyx_GOTREF(__pyx_t_16);
+04871:                         QuestDBErrorCode.BadDataFrame,
            __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4871, __pyx_L5_error)
            __Pyx_GOTREF(__pyx_t_11);
            __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4871, __pyx_L5_error)
            __Pyx_GOTREF(__pyx_t_12);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+04872:                         f'Bad column {df_col_name!r} at row {i}: integer '
            __pyx_t_11 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4872, __pyx_L5_error)
            __Pyx_GOTREF(__pyx_t_11);
            __pyx_t_17 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4872, __pyx_L5_error)
            __Pyx_GOTREF(__pyx_t_17);
/* … */
            __pyx_t_15 = __Pyx_PyUnicode_Join(__pyx_t_22, 7, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_11) + 8 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17) + 181 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14) + 24, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_11) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14));
            if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4872, __pyx_L5_error)
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
            __pyx_t_20 = 1;
            #if CYTHON_UNPACK_METHODS
            if (unlikely(PyMethod_Check(__pyx_t_16))) {
              __pyx_t_19 = PyMethod_GET_SELF(__pyx_t_16);
              assert(__pyx_t_19);
              PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_16);
              __Pyx_INCREF(__pyx_t_19);
              __Pyx_INCREF(__pyx__function);
              __Pyx_DECREF_SET(__pyx_t_16, __pyx__function);
              __pyx_t_20 = 0;
            }
            #endif
            {
              PyObject *__pyx_callargs[3] = {__pyx_t_19, __pyx_t_12, __pyx_t_15};
              __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_16, __pyx_callargs+__pyx_t_20, (3-__pyx_t_20) | (__pyx_t_20*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
              __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
              __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
              __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
              if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4870, __pyx_L5_error)
              __Pyx_GOTREF(__pyx_t_8);
            }
            __Pyx_Raise(__pyx_t_8, 0, 0, 0);
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            __PYX_ERR(0, 4870, __pyx_L5_error)
 04873:                         f'out of range for a LONG column '
 04874:                         f'(-2**63 .. 2**63-1). A 256-bit value needs a '
 04875:                         f'LONG256 column, which this column claims with '
 04876:                         f"df.attrs['questdb'] = {{'version': 1, "
+04877:                         f"'columns': {{{df_col_name!r}: "
            __pyx_t_14 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4877, __pyx_L5_error)
            __Pyx_GOTREF(__pyx_t_14);
            __pyx_t_22[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
            __pyx_t_22[1] = __pyx_t_11;
            __pyx_t_22[2] = __pyx_mstate_global->__pyx_kp_u_at_row;
            __pyx_t_22[3] = __pyx_t_17;
            __pyx_t_22[4] = __pyx_mstate_global->__pyx_kp_u_integer_out_of_range_for_a_LONG_2;
            __pyx_t_22[5] = __pyx_t_14;
            __pyx_t_22[6] = __pyx_mstate_global->__pyx_kp_u_kind_long256;
 04878:                         f"{{'kind': 'long256'}}}}}}.")
+04879:             elif _dataframe_is_null_pyobj(cell):
        __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(__pyx_v_cell);
        if (likely(__pyx_t_1)) {
/* … */
        }
+04880:                 b.has_nulls = True
          __pyx_v_b->has_nulls = 1;
+04881:                 continue
          goto __pyx_L14_continue;
 04882:             else:
+04883:                 raise QuestDBError(
        /*else*/ {
          __pyx_t_16 = NULL;
          __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4883, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_15);
+04884:                     QuestDBErrorCode.BadDataFrame,
          __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4884, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4884, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_19);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+04885:                     f'Bad column {df_col_name!r} at row {i}: expected int, '
          __pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4885, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_14 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4885, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_14);
/* … */
          __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_22, 7, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12) + 8 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14) + 20 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_11) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_11));
          if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4885, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_17);
          __Pyx_DECREF(__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;
          __pyx_t_20 = 1;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(PyMethod_Check(__pyx_t_15))) {
            __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_15);
            assert(__pyx_t_16);
            PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_15);
            __Pyx_INCREF(__pyx_t_16);
            __Pyx_INCREF(__pyx__function);
            __Pyx_DECREF_SET(__pyx_t_15, __pyx__function);
            __pyx_t_20 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_16, __pyx_t_19, __pyx_t_17};
            __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_15, __pyx_callargs+__pyx_t_20, (3-__pyx_t_20) | (__pyx_t_20*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
            __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
            __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4883, __pyx_L5_error)
            __Pyx_GOTREF(__pyx_t_8);
          }
          __Pyx_Raise(__pyx_t_8, 0, 0, 0);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __PYX_ERR(0, 4883, __pyx_L5_error)
        }
        __pyx_L16:;
+04886:                     f'got {_fqn(type(<object>cell))}.')
          __pyx_t_17 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4886, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_17);
          __pyx_t_11 = __Pyx_PyUnicode_Unicode(__pyx_t_17); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4886, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __pyx_t_22[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
          __pyx_t_22[1] = __pyx_t_12;
          __pyx_t_22[2] = __pyx_mstate_global->__pyx_kp_u_at_row;
          __pyx_t_22[3] = __pyx_t_14;
          __pyx_t_22[4] = __pyx_mstate_global->__pyx_kp_u_expected_int_got;
          __pyx_t_22[5] = __pyx_t_11;
          __pyx_t_22[6] = __pyx_mstate_global->__pyx_kp_u__2;
 04887: 
+04888:             if narrow_type is not None and (value < 0 or value > narrow_max):
        __pyx_t_23 = (__pyx_v_narrow_type != ((PyObject*)Py_None));
        if (__pyx_t_23) {
        } else {
          __pyx_t_1 = __pyx_t_23;
          goto __pyx_L21_bool_binop_done;
        }
        __pyx_t_23 = (__pyx_v_value < 0);
        if (!__pyx_t_23) {
        } else {
          __pyx_t_1 = __pyx_t_23;
          goto __pyx_L21_bool_binop_done;
        }
        __pyx_t_23 = (__pyx_v_value > __pyx_v_narrow_max);
        __pyx_t_1 = __pyx_t_23;
        __pyx_L21_bool_binop_done:;
        if (unlikely(__pyx_t_1)) {
/* … */
        }
+04889:                 raise QuestDBError(
          __pyx_t_15 = NULL;
          __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4889, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_17);
+04890:                     QuestDBErrorCode.BadDataFrame,
          __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4890, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_19);
          __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4890, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_16);
          __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+04891:                     f'Bad column {df_col_name!r} at row {i}: '
          __pyx_t_19 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4891, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_19);
          __pyx_t_11 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4891, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_11);
/* … */
          __pyx_t_13 = __Pyx_PyUnicode_Join(__pyx_t_18, 9, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_19) + 8 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_11) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14) + 34 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_19) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14));
          if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4891, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __pyx_t_20 = 1;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(PyMethod_Check(__pyx_t_17))) {
            __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_17);
            assert(__pyx_t_15);
            PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_17);
            __Pyx_INCREF(__pyx_t_15);
            __Pyx_INCREF(__pyx__function);
            __Pyx_DECREF_SET(__pyx_t_17, __pyx__function);
            __pyx_t_20 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_15, __pyx_t_16, __pyx_t_13};
            __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_17, __pyx_callargs+__pyx_t_20, (3-__pyx_t_20) | (__pyx_t_20*__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_13); __pyx_t_13 = 0;
            __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
            if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4889, __pyx_L5_error)
            __Pyx_GOTREF(__pyx_t_8);
          }
          __Pyx_Raise(__pyx_t_8, 0, 0, 0);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __PYX_ERR(0, 4889, __pyx_L5_error)
+04892:                     f'{narrow_type} values must be in the range '
          __pyx_t_14 = __Pyx_PyUnicode_Unicode(__pyx_v_narrow_type); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4892, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_14);
+04893:                     f'0 .. {narrow_max}.')
          __pyx_t_12 = __Pyx_PyUnicode_From_int64_t(__pyx_v_narrow_max, 0, ' ', 'd'); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4893, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_18[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
          __pyx_t_18[1] = __pyx_t_19;
          __pyx_t_18[2] = __pyx_mstate_global->__pyx_kp_u_at_row;
          __pyx_t_18[3] = __pyx_t_11;
          __pyx_t_18[4] = __pyx_mstate_global->__pyx_kp_u_;
          __pyx_t_18[5] = __pyx_t_14;
          __pyx_t_18[6] = __pyx_mstate_global->__pyx_kp_u_values_must_be_in_the_range_0;
          __pyx_t_18[7] = __pyx_t_12;
          __pyx_t_18[8] = __pyx_mstate_global->__pyx_kp_u__2;
+04894:             if elem_size == 4:
        switch (__pyx_v_elem_size) {
          case 4:
/* … */
          break;
          case 2:
+04895:                 (<uint32_t*>values)[i] = <uint32_t>value
          (((uint32_t *)__pyx_v_values)[__pyx_v_i]) = ((uint32_t)__pyx_v_value);
+04896:             elif elem_size == 2:
          break;
          default:
+04897:                 (<uint16_t*>values)[i] = <uint16_t>value
          (((uint16_t *)__pyx_v_values)[__pyx_v_i]) = ((uint16_t)__pyx_v_value);
 04898:             else:
+04899:                 (<int64_t*>values)[i] = value
          (((int64_t *)__pyx_v_values)[__pyx_v_i]) = __pyx_v_value;
          break;
        }
+04900:             if b.validity != NULL:
        __pyx_t_1 = (__pyx_v_b->validity != NULL);
        if (__pyx_t_1) {
/* … */
        }
        __pyx_L14_continue:;
      }
+04901:                 _pyobj_set_validity_bit(b.validity, i)
          __pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
 04902: 
+04903:         if not b.has_nulls and b.validity != NULL:
      __pyx_t_23 = (!__pyx_v_b->has_nulls);
      if (__pyx_t_23) {
      } else {
        __pyx_t_1 = __pyx_t_23;
        goto __pyx_L26_bool_binop_done;
      }
      __pyx_t_23 = (__pyx_v_b->validity != NULL);
      __pyx_t_1 = __pyx_t_23;
      __pyx_L26_bool_binop_done:;
      if (__pyx_t_1) {
/* … */
      }
+04904:             free(b.validity)
        free(__pyx_v_b->validity);
+04905:             b.validity = NULL
        __pyx_v_b->validity = NULL;
+04906:     except:
    /*except:*/ {
      __Pyx_AddTraceback("questdb._client._dataframe_columnar_build_int_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_17, &__pyx_t_13) < 0) __PYX_ERR(0, 4906, __pyx_L7_except_error)
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_17);
      __Pyx_XGOTREF(__pyx_t_13);
+04907:         pyobj_built_free(b)
      __pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+04908:         raise
      __Pyx_GIVEREF(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_17);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ErrRestoreWithState(__pyx_t_8, __pyx_t_17, __pyx_t_13);
      __pyx_t_8 = 0;  __pyx_t_17 = 0;  __pyx_t_13 = 0; 
      __PYX_ERR(0, 4908, __pyx_L7_except_error)
    }
 04909: 
+04910:     return b
  __pyx_r = __pyx_v_b;
  goto __pyx_L0;
 04911: 
 04912: 
+04913: cdef object _LONG256_LIMIT = 1 << 256
  __Pyx_INCREF(__pyx_mstate_global->__pyx_int_large_0x1000000000000000_xxx_000000000000000000);
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__LONG256_LIMIT);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__LONG256_LIMIT, __pyx_mstate_global->__pyx_int_large_0x1000000000000000_xxx_000000000000000000);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_large_0x1000000000000000_xxx_000000000000000000);
 04914: 
 04915: 
+04916: cdef pyobj_built_t* _dataframe_columnar_build_long256_pyobj(
static struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_f_7questdb_7_client__dataframe_columnar_build_long256_pyobj(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count, PyObject *__pyx_v_df_col_name) {
  struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_b;
  PyObject **__pyx_v_access;
  PyObject *__pyx_v_cell;
  PyObject *__pyx_v_cell_ref = 0;
  uint8_t *__pyx_v_buf;
  size_t __pyx_v_buf_bytes;
  size_t __pyx_v_validity_bytes;
  size_t __pyx_v_i;
  PyObject *__pyx_v_py_cell = 0;
  PyObject *__pyx_v_le_bytes = 0;
  PyObject *__pyx_v_int_to_bytes = 0;
  struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_AddTraceback("questdb._client._dataframe_columnar_build_long256_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_cell_ref);
  __Pyx_XDECREF(__pyx_v_py_cell);
  __Pyx_XDECREF(__pyx_v_le_bytes);
  __Pyx_XDECREF(__pyx_v_int_to_bytes);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 04917:         col_t* col,
 04918:         size_t row_count,
 04919:         object df_col_name) except NULL:
 04920:     """
 04921:     Walk a PyObject int column claimed as LONG256 and produce 32 bytes
 04922:     per row + LSB-packed validity bitmap.
 04923: 
 04924:     ``qwp_numpy_s32`` puts the row on the wire verbatim, and the wire
 04925:     order for LONG256 is little-endian — the same order
 04926:     ``QueryResult.to_pandas()`` read the integer out of, so a value that
 04927:     came from a query goes back unchanged.
 04928:     """
+04929:     cdef pyobj_built_t* b = <pyobj_built_t*>calloc(1, sizeof(pyobj_built_t))
  __pyx_v_b = ((struct __pyx_t_7questdb_7_client_pyobj_built_t *)calloc(1, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t))));
+04930:     if b == NULL:
  __pyx_t_1 = (__pyx_v_b == NULL);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+04931:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 4931, __pyx_L1_error)
+04932:     b.row_count = row_count
  __pyx_v_b->row_count = __pyx_v_row_count;
 04933: 
+04934:     cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
  __pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
 04935:     cdef PyObject* cell
 04936:     # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
 04937:     cdef object cell_ref
+04938:     cdef uint8_t* buf = NULL
  __pyx_v_buf = NULL;
+04939:     cdef size_t buf_bytes = row_count * 32 if row_count > 0 else 32
  __pyx_t_1 = (__pyx_v_row_count > 0);
  if (__pyx_t_1) {
    __pyx_t_2 = (__pyx_v_row_count * 32);
  } else {
    __pyx_t_2 = 32;
  }
  __pyx_v_buf_bytes = __pyx_t_2;
+04940:     cdef size_t validity_bytes = (row_count + 7) // 8
  __pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
 04941:     cdef size_t i
 04942:     cdef object py_cell
 04943:     cdef bytes le_bytes
 04944:     # Called unbound so that an `int` subclass overriding `to_bytes`
 04945:     # cannot hand back something other than the 32 bytes the column
 04946:     # write copies.
+04947:     cdef object int_to_bytes = int.to_bytes
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)(&PyLong_Type)), __pyx_mstate_global->__pyx_n_u_to_bytes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4947, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_int_to_bytes = __pyx_t_3;
  __pyx_t_3 = 0;
 04948: 
+04949:     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_L9_try_end;
    __pyx_L4_error:;
    __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_14); __pyx_t_14 = 0;
    __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
    __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
    __pyx_L6_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_L1_error;
    __pyx_L9_try_end:;
  }
+04950:         buf = <uint8_t*>calloc(buf_bytes, sizeof(uint8_t))
      __pyx_v_buf = ((uint8_t *)calloc(__pyx_v_buf_bytes, (sizeof(uint8_t))));
+04951:         if buf == NULL:
      __pyx_t_1 = (__pyx_v_buf == NULL);
      if (unlikely(__pyx_t_1)) {
/* … */
      }
+04952:             raise MemoryError()
        PyErr_NoMemory(); __PYX_ERR(0, 4952, __pyx_L4_error)
+04953:         b.data = <void*>buf
      __pyx_v_b->data = ((void *)__pyx_v_buf);
+04954:         if validity_bytes > 0:
      __pyx_t_1 = (__pyx_v_validity_bytes > 0);
      if (__pyx_t_1) {
/* … */
      }
+04955:             b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
        __pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+04956:             if b.validity == NULL:
        __pyx_t_1 = (__pyx_v_b->validity == NULL);
        if (unlikely(__pyx_t_1)) {
/* … */
        }
+04957:                 raise MemoryError()
          PyErr_NoMemory(); __PYX_ERR(0, 4957, __pyx_L4_error)
+04958:         for i in range(row_count):
      __pyx_t_2 = __pyx_v_row_count;
      __pyx_t_7 = __pyx_t_2;
      for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
        __pyx_v_i = __pyx_t_8;
+04959:             cell_ref = <object>access[i]
        __pyx_t_3 = ((PyObject *)(__pyx_v_access[__pyx_v_i]));
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_XDECREF_SET(__pyx_v_cell_ref, __pyx_t_3);
        __pyx_t_3 = 0;
+04960:             cell = <PyObject*>cell_ref
        __pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+04961:             if PyLong_CheckExact(cell):
        __pyx_t_1 = PyLong_CheckExact(__pyx_v_cell);
        if (__pyx_t_1) {
/* … */
          goto __pyx_L15;
        }
+04962:                 py_cell = <object>cell
          __pyx_t_3 = ((PyObject *)__pyx_v_cell);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_XDECREF_SET(__pyx_v_py_cell, __pyx_t_3);
          __pyx_t_3 = 0;
+04963:                 if py_cell < 0 or py_cell >= _LONG256_LIMIT:
          __pyx_t_3 = PyObject_RichCompare(__pyx_v_py_cell, __pyx_mstate_global->__pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4963, __pyx_L4_error)
          __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 4963, __pyx_L4_error)
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (!__pyx_t_9) {
          } else {
            __pyx_t_1 = __pyx_t_9;
            goto __pyx_L17_bool_binop_done;
          }
          __pyx_t_3 = PyObject_RichCompare(__pyx_v_py_cell, __pyx_v_7questdb_7_client__LONG256_LIMIT, Py_GE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4963, __pyx_L4_error)
          __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 4963, __pyx_L4_error)
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __pyx_t_1 = __pyx_t_9;
          __pyx_L17_bool_binop_done:;
          if (unlikely(__pyx_t_1)) {
/* … */
          }
+04964:                     raise QuestDBError(
            __pyx_t_10 = NULL;
            __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4964, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_11);
+04965:                         QuestDBErrorCode.BadDataFrame,
            __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4965, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_12);
            __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4965, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_13);
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+04966:                         f'Bad column {df_col_name!r} at row {i}: LONG256 '
            __pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4966, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_12);
            __pyx_t_14 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4966, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_14);
            __pyx_t_15[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
            __pyx_t_15[1] = __pyx_t_12;
            __pyx_t_15[2] = __pyx_mstate_global->__pyx_kp_u_at_row;
            __pyx_t_15[3] = __pyx_t_14;
            __pyx_t_15[4] = __pyx_mstate_global->__pyx_kp_u_LONG256_is_unsigned_and_256_bit;
            __pyx_t_16 = __Pyx_PyUnicode_Join(__pyx_t_15, 5, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12) + 8 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14) + 95, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12));
            if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4966, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_16);
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
            __pyx_t_17 = 1;
            #if CYTHON_UNPACK_METHODS
            if (unlikely(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_17 = 0;
            }
            #endif
            {
              PyObject *__pyx_callargs[3] = {__pyx_t_10, __pyx_t_13, __pyx_t_16};
              __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_17, (3-__pyx_t_17) | (__pyx_t_17*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
              __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
              __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
              if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4964, __pyx_L4_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(0, 4964, __pyx_L4_error)
 04967:                         f'is unsigned and 256 bits wide, so the value '
 04968:                         f'must be in the range 0 <= value < 2**256.')
+04969:                 le_bytes = int_to_bytes(py_cell, 32, 'little')
          __pyx_t_11 = NULL;
          __Pyx_INCREF(__pyx_v_int_to_bytes);
          __pyx_t_16 = __pyx_v_int_to_bytes; 
          __pyx_t_17 = 1;
          #if CYTHON_UNPACK_METHODS
          if (likely(PyMethod_Check(__pyx_t_16))) {
            __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_16);
            assert(__pyx_t_11);
            PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_16);
            __Pyx_INCREF(__pyx_t_11);
            __Pyx_INCREF(__pyx__function);
            __Pyx_DECREF_SET(__pyx_t_16, __pyx__function);
            __pyx_t_17 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[4] = {__pyx_t_11, __pyx_v_py_cell, __pyx_mstate_global->__pyx_int_32, __pyx_mstate_global->__pyx_n_u_little};
            __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_16, __pyx_callargs+__pyx_t_17, (4-__pyx_t_17) | (__pyx_t_17*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4969, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_3);
          }
          if (!(likely(PyBytes_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_3))) __PYX_ERR(0, 4969, __pyx_L4_error)
          __Pyx_XDECREF_SET(__pyx_v_le_bytes, ((PyObject*)__pyx_t_3));
          __pyx_t_3 = 0;
+04970:                 memcpy(buf + i * 32, PyBytes_AsString(le_bytes), 32)
          __pyx_t_18 = PyBytes_AsString(__pyx_v_le_bytes); if (unlikely(__pyx_t_18 == ((void *)NULL))) __PYX_ERR(0, 4970, __pyx_L4_error)
          (void)(memcpy((__pyx_v_buf + (__pyx_v_i * 32)), __pyx_t_18, 32));
+04971:                 if b.validity != NULL:
          __pyx_t_1 = (__pyx_v_b->validity != NULL);
          if (__pyx_t_1) {
/* … */
          }
+04972:                     _pyobj_set_validity_bit(b.validity, i)
            __pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
+04973:             elif _dataframe_is_null_pyobj(cell):
        __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(__pyx_v_cell);
        if (likely(__pyx_t_1)) {
/* … */
          goto __pyx_L15;
        }
+04974:                 b.has_nulls = True
          __pyx_v_b->has_nulls = 1;
 04975:             else:
+04976:                 raise QuestDBError(
        /*else*/ {
          __pyx_t_16 = NULL;
          __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4976, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_11);
+04977:                     QuestDBErrorCode.BadDataFrame,
          __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4977, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4977, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+04978:                     f'Bad column {df_col_name!r} at row {i}: expected int, '
          __pyx_t_13 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4978, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_14 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4978, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_14);
/* … */
          __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_20, 7, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13) + 8 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14) + 20 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_19) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_19));
          if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4978, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
          __pyx_t_17 = 1;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(PyMethod_Check(__pyx_t_11))) {
            __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_11);
            assert(__pyx_t_16);
            PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11);
            __Pyx_INCREF(__pyx_t_16);
            __Pyx_INCREF(__pyx__function);
            __Pyx_DECREF_SET(__pyx_t_11, __pyx__function);
            __pyx_t_17 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_16, __pyx_t_10, __pyx_t_12};
            __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_17, (3-__pyx_t_17) | (__pyx_t_17*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
            __Pyx_DECREF(__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_3)) __PYX_ERR(0, 4976, __pyx_L4_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(0, 4976, __pyx_L4_error)
        }
        __pyx_L15:;
      }
+04979:                     f'got {_fqn(type(<object>cell))}.')
          __pyx_t_12 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4979, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_19 = __Pyx_PyUnicode_Unicode(__pyx_t_12); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 4979, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_19);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __pyx_t_20[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
          __pyx_t_20[1] = __pyx_t_13;
          __pyx_t_20[2] = __pyx_mstate_global->__pyx_kp_u_at_row;
          __pyx_t_20[3] = __pyx_t_14;
          __pyx_t_20[4] = __pyx_mstate_global->__pyx_kp_u_expected_int_got;
          __pyx_t_20[5] = __pyx_t_19;
          __pyx_t_20[6] = __pyx_mstate_global->__pyx_kp_u__2;
 04980: 
+04981:         if not b.has_nulls and b.validity != NULL:
      __pyx_t_9 = (!__pyx_v_b->has_nulls);
      if (__pyx_t_9) {
      } else {
        __pyx_t_1 = __pyx_t_9;
        goto __pyx_L21_bool_binop_done;
      }
      __pyx_t_9 = (__pyx_v_b->validity != NULL);
      __pyx_t_1 = __pyx_t_9;
      __pyx_L21_bool_binop_done:;
      if (__pyx_t_1) {
/* … */
      }
+04982:             free(b.validity)
        free(__pyx_v_b->validity);
+04983:             b.validity = NULL
        __pyx_v_b->validity = NULL;
+04984:     except:
    /*except:*/ {
      __Pyx_AddTraceback("questdb._client._dataframe_columnar_build_long256_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_11, &__pyx_t_12) < 0) __PYX_ERR(0, 4984, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_3);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
+04985:         pyobj_built_free(b)
      __pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+04986:         raise
      __Pyx_GIVEREF(__pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_ErrRestoreWithState(__pyx_t_3, __pyx_t_11, __pyx_t_12);
      __pyx_t_3 = 0;  __pyx_t_11 = 0;  __pyx_t_12 = 0; 
      __PYX_ERR(0, 4986, __pyx_L6_except_error)
    }
 04987: 
+04988:     return b
  __pyx_r = __pyx_v_b;
  goto __pyx_L0;
 04989: 
 04990: 
+04991: cdef pyobj_built_t* _dataframe_columnar_build_float_pyobj(
static struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_f_7questdb_7_client__dataframe_columnar_build_float_pyobj(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count, PyObject *__pyx_v_df_col_name) {
  struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_b;
  PyObject **__pyx_v_access;
  PyObject *__pyx_v_cell;
  PyObject *__pyx_v_cell_ref = 0;
  double *__pyx_v_values;
  size_t __pyx_v_validity_bytes;
  size_t __pyx_v_i;
  double __pyx_v_value;
  struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_8);
  __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_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_AddTraceback("questdb._client._dataframe_columnar_build_float_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_cell_ref);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 04992:         col_t* col,
 04993:         size_t row_count,
 04994:         object df_col_name) except NULL:
 04995:     """
 04996:     Walk a PyObject float column once and produce a contiguous double
 04997:     buffer + LSB-packed validity bitmap.
 04998:     """
+04999:     cdef pyobj_built_t* b = <pyobj_built_t*>calloc(1, sizeof(pyobj_built_t))
  __pyx_v_b = ((struct __pyx_t_7questdb_7_client_pyobj_built_t *)calloc(1, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t))));
+05000:     if b == NULL:
  __pyx_t_1 = (__pyx_v_b == NULL);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+05001:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 5001, __pyx_L1_error)
+05002:     b.row_count = row_count
  __pyx_v_b->row_count = __pyx_v_row_count;
 05003: 
+05004:     cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
  __pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
 05005:     cdef PyObject* cell
 05006:     # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
 05007:     cdef object cell_ref
+05008:     cdef double* values = NULL
  __pyx_v_values = NULL;
+05009:     cdef size_t validity_bytes = (row_count + 7) // 8
  __pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
 05010:     cdef size_t i
 05011:     cdef double value
 05012: 
+05013:     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_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_14); __pyx_t_14 = 0;
    __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;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 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_L9_try_end:;
  }
+05014:         values = <double*>calloc(row_count if row_count > 0 else 1,
      __pyx_t_1 = (__pyx_v_row_count > 0);
      if (__pyx_t_1) {
        __pyx_t_5 = __pyx_v_row_count;
      } else {
        __pyx_t_5 = 1;
      }
/* … */
      __pyx_v_values = ((double *)calloc(__pyx_t_5, (sizeof(double))));
 05015:                                  sizeof(double))
+05016:         if values == NULL:
      __pyx_t_1 = (__pyx_v_values == NULL);
      if (unlikely(__pyx_t_1)) {
/* … */
      }
+05017:             raise MemoryError()
        PyErr_NoMemory(); __PYX_ERR(0, 5017, __pyx_L4_error)
+05018:         b.data = <void*>values
      __pyx_v_b->data = ((void *)__pyx_v_values);
+05019:         if validity_bytes > 0:
      __pyx_t_1 = (__pyx_v_validity_bytes > 0);
      if (__pyx_t_1) {
/* … */
      }
+05020:             b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
        __pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+05021:             if b.validity == NULL:
        __pyx_t_1 = (__pyx_v_b->validity == NULL);
        if (unlikely(__pyx_t_1)) {
/* … */
        }
+05022:                 raise MemoryError()
          PyErr_NoMemory(); __PYX_ERR(0, 5022, __pyx_L4_error)
+05023:         for i in range(row_count):
      __pyx_t_5 = __pyx_v_row_count;
      __pyx_t_6 = __pyx_t_5;
      for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
        __pyx_v_i = __pyx_t_7;
+05024:             cell_ref = <object>access[i]
        __pyx_t_8 = ((PyObject *)(__pyx_v_access[__pyx_v_i]));
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_XDECREF_SET(__pyx_v_cell_ref, __pyx_t_8);
        __pyx_t_8 = 0;
+05025:             cell = <PyObject*>cell_ref
        __pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+05026:             if PyFloat_CheckExact(cell):
        __pyx_t_1 = PyFloat_CheckExact(__pyx_v_cell);
        if (__pyx_t_1) {
/* … */
          goto __pyx_L15;
        }
+05027:                 value = PyFloat_AS_DOUBLE(cell)
          __pyx_v_value = PyFloat_AS_DOUBLE(__pyx_v_cell);
+05028:                 if isnan(value):
          __pyx_t_1 = isnan(__pyx_v_value);
          if (__pyx_t_1) {
/* … */
            goto __pyx_L16;
          }
 05029:                     # pandas NaN-as-null convention matches the row-path.
+05030:                     b.has_nulls = True
            __pyx_v_b->has_nulls = 1;
 05031:                 else:
+05032:                     values[i] = value
          /*else*/ {
            (__pyx_v_values[__pyx_v_i]) = __pyx_v_value;
+05033:                     if b.validity != NULL:
            __pyx_t_1 = (__pyx_v_b->validity != NULL);
            if (__pyx_t_1) {
/* … */
            }
          }
          __pyx_L16:;
+05034:                         _pyobj_set_validity_bit(b.validity, i)
              __pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
+05035:             elif PyLong_CheckExact(cell) or PyBool_Check(cell):
        __pyx_t_9 = PyLong_CheckExact(__pyx_v_cell);
        if (!__pyx_t_9) {
        } else {
          __pyx_t_1 = __pyx_t_9;
          goto __pyx_L18_bool_binop_done;
        }
        __pyx_t_9 = PyBool_Check(__pyx_v_cell);
        __pyx_t_1 = __pyx_t_9;
        __pyx_L18_bool_binop_done:;
        if (__pyx_t_1) {
/* … */
          goto __pyx_L15;
        }
 05036:                 # Accept widening of int / bool to float, matching how
 05037:                 # Python implicitly converts when you do float(x).
+05038:                 values[i] = PyFloat_AsDouble(cell)
          __pyx_t_10 = PyFloat_AsDouble(__pyx_v_cell); if (unlikely(__PYX_CHECK_FLOAT_EXCEPTION(__pyx_t_10, ((double)(-1.0))) && PyErr_Occurred())) __PYX_ERR(0, 5038, __pyx_L4_error)
          (__pyx_v_values[__pyx_v_i]) = __pyx_t_10;
+05039:                 if b.validity != NULL:
          __pyx_t_1 = (__pyx_v_b->validity != NULL);
          if (__pyx_t_1) {
/* … */
          }
+05040:                     _pyobj_set_validity_bit(b.validity, i)
            __pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
+05041:             elif _dataframe_is_null_pyobj(cell):
        __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(__pyx_v_cell);
        if (likely(__pyx_t_1)) {
/* … */
          goto __pyx_L15;
        }
+05042:                 b.has_nulls = True
          __pyx_v_b->has_nulls = 1;
 05043:             else:
+05044:                 raise QuestDBError(
        /*else*/ {
          __pyx_t_11 = NULL;
          __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5044, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_12);
+05045:                     QuestDBErrorCode.BadDataFrame,
          __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 5045, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5045, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_14);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+05046:                     f'Bad column {df_col_name!r} at row {i}: expected float, '
          __pyx_t_13 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 5046, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_15 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5046, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_15);
/* … */
          __pyx_t_16 = __Pyx_PyUnicode_Join(__pyx_t_18, 7, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13) + 8 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15) + 22 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17));
          if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5046, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_16);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __pyx_t_19 = 1;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(PyMethod_Check(__pyx_t_12))) {
            __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_12);
            assert(__pyx_t_11);
            PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_12);
            __Pyx_INCREF(__pyx_t_11);
            __Pyx_INCREF(__pyx__function);
            __Pyx_DECREF_SET(__pyx_t_12, __pyx__function);
            __pyx_t_19 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_11, __pyx_t_14, __pyx_t_16};
            __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_12, __pyx_callargs+__pyx_t_19, (3-__pyx_t_19) | (__pyx_t_19*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
            if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5044, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_8);
          }
          __Pyx_Raise(__pyx_t_8, 0, 0, 0);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __PYX_ERR(0, 5044, __pyx_L4_error)
        }
        __pyx_L15:;
      }
+05047:                     f'got {_fqn(type(<object>cell))}.')
          __pyx_t_16 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5047, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_16);
          __pyx_t_17 = __Pyx_PyUnicode_Unicode(__pyx_t_16); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5047, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_17);
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          __pyx_t_18[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
          __pyx_t_18[1] = __pyx_t_13;
          __pyx_t_18[2] = __pyx_mstate_global->__pyx_kp_u_at_row;
          __pyx_t_18[3] = __pyx_t_15;
          __pyx_t_18[4] = __pyx_mstate_global->__pyx_kp_u_expected_float_got;
          __pyx_t_18[5] = __pyx_t_17;
          __pyx_t_18[6] = __pyx_mstate_global->__pyx_kp_u__2;
 05048: 
+05049:         if not b.has_nulls and b.validity != NULL:
      __pyx_t_9 = (!__pyx_v_b->has_nulls);
      if (__pyx_t_9) {
      } else {
        __pyx_t_1 = __pyx_t_9;
        goto __pyx_L22_bool_binop_done;
      }
      __pyx_t_9 = (__pyx_v_b->validity != NULL);
      __pyx_t_1 = __pyx_t_9;
      __pyx_L22_bool_binop_done:;
      if (__pyx_t_1) {
/* … */
      }
+05050:             free(b.validity)
        free(__pyx_v_b->validity);
+05051:             b.validity = NULL
        __pyx_v_b->validity = NULL;
+05052:     except:
    /*except:*/ {
      __Pyx_AddTraceback("questdb._client._dataframe_columnar_build_float_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_12, &__pyx_t_16) < 0) __PYX_ERR(0, 5052, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_16);
+05053:         pyobj_built_free(b)
      __pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+05054:         raise
      __Pyx_GIVEREF(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_16);
      __Pyx_ErrRestoreWithState(__pyx_t_8, __pyx_t_12, __pyx_t_16);
      __pyx_t_8 = 0;  __pyx_t_12 = 0;  __pyx_t_16 = 0; 
      __PYX_ERR(0, 5054, __pyx_L6_except_error)
    }
 05055: 
+05056:     return b
  __pyx_r = __pyx_v_b;
  goto __pyx_L0;
 05057: 
 05058: 
+05059: cdef pyobj_built_t* _dataframe_columnar_build_bool_pyobj(
static struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_f_7questdb_7_client__dataframe_columnar_build_bool_pyobj(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count, PyObject *__pyx_v_df_col_name) {
  struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_b;
  PyObject **__pyx_v_access;
  PyObject *__pyx_v_cell;
  PyObject *__pyx_v_cell_ref = 0;
  uint8_t *__pyx_v_bits;
  size_t __pyx_v_bytes;
  size_t __pyx_v_i;
  struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_AddTraceback("questdb._client._dataframe_columnar_build_bool_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_cell_ref);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 05060:         col_t* col,
 05061:         size_t row_count,
 05062:         object df_col_name) except NULL:
 05063:     """
 05064:     Walk a PyObject bool column once and pack the values into an
 05065:     Arrow LSB-first bitmap (one bit per row). Null cells are rejected —
 05066:     matches the row-path behaviour (QuestDB BOOLEAN has no null
 05067:     representation at the row level).
 05068:     """
+05069:     cdef pyobj_built_t* b = <pyobj_built_t*>calloc(1, sizeof(pyobj_built_t))
  __pyx_v_b = ((struct __pyx_t_7questdb_7_client_pyobj_built_t *)calloc(1, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t))));
+05070:     if b == NULL:
  __pyx_t_1 = (__pyx_v_b == NULL);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+05071:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 5071, __pyx_L1_error)
+05072:     b.row_count = row_count
  __pyx_v_b->row_count = __pyx_v_row_count;
 05073: 
+05074:     cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
  __pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
 05075:     cdef PyObject* cell
 05076:     # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
 05077:     cdef object cell_ref
+05078:     cdef uint8_t* bits = NULL
  __pyx_v_bits = NULL;
+05079:     cdef size_t bytes = (row_count + 7) // 8
  __pyx_v_bytes = ((__pyx_v_row_count + 7) / 8);
 05080:     cdef size_t i
 05081: 
+05082:     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_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_14); __pyx_t_14 = 0;
    __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
    __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 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_L9_try_end:;
  }
+05083:         if bytes == 0:
      __pyx_t_1 = (__pyx_v_bytes == 0);
      if (__pyx_t_1) {
/* … */
      }
+05084:             bytes = 1
        __pyx_v_bytes = 1;
+05085:         bits = <uint8_t*>calloc(bytes, sizeof(uint8_t))
      __pyx_v_bits = ((uint8_t *)calloc(__pyx_v_bytes, (sizeof(uint8_t))));
+05086:         if bits == NULL:
      __pyx_t_1 = (__pyx_v_bits == NULL);
      if (unlikely(__pyx_t_1)) {
/* … */
      }
+05087:             raise MemoryError()
        PyErr_NoMemory(); __PYX_ERR(0, 5087, __pyx_L4_error)
+05088:         b.data = <void*>bits
      __pyx_v_b->data = ((void *)__pyx_v_bits);
+05089:         for i in range(row_count):
      __pyx_t_5 = __pyx_v_row_count;
      __pyx_t_6 = __pyx_t_5;
      for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
        __pyx_v_i = __pyx_t_7;
+05090:             cell_ref = <object>access[i]
        __pyx_t_8 = ((PyObject *)(__pyx_v_access[__pyx_v_i]));
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_XDECREF_SET(__pyx_v_cell_ref, __pyx_t_8);
        __pyx_t_8 = 0;
+05091:             cell = <PyObject*>cell_ref
        __pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+05092:             if PyBool_Check(cell):
        __pyx_t_1 = PyBool_Check(__pyx_v_cell);
        if (likely(__pyx_t_1)) {
/* … */
          goto __pyx_L14;
        }
+05093:                 if cell == Py_True:
          __pyx_t_1 = (__pyx_v_cell == Py_True);
          if (__pyx_t_1) {
/* … */
          }
+05094:                     bits[i >> 3] |= <uint8_t>(1 << (i & 7))
            __pyx_t_9 = (__pyx_v_i >> 3);
            (__pyx_v_bits[__pyx_t_9]) = ((__pyx_v_bits[__pyx_t_9]) | ((uint8_t)(1 << (__pyx_v_i & 7))));
+05095:             elif _dataframe_is_null_pyobj(cell):
        __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(__pyx_v_cell);
        if (unlikely(__pyx_t_1)) {
/* … */
        }
+05096:                 raise QuestDBError(
          __pyx_t_10 = NULL;
          __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5096, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_11);
+05097:                     QuestDBErrorCode.BadDataFrame,
          __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5097, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 5097, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+05098:                     f'Bad column {df_col_name!r} at row {i}: cannot insert '
          __pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5098, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_14 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5098, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_14);
          __pyx_t_15[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
          __pyx_t_15[1] = __pyx_t_12;
          __pyx_t_15[2] = __pyx_mstate_global->__pyx_kp_u_at_row;
          __pyx_t_15[3] = __pyx_t_14;
          __pyx_t_15[4] = __pyx_mstate_global->__pyx_kp_u_cannot_insert_null_into_a_boole;
          __pyx_t_16 = __Pyx_PyUnicode_Join(__pyx_t_15, 5, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12) + 8 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14) + 43, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12));
          if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5098, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_16);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __pyx_t_9 = 1;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(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_9 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_10, __pyx_t_13, __pyx_t_16};
            __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5096, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_8);
          }
          __Pyx_Raise(__pyx_t_8, 0, 0, 0);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __PYX_ERR(0, 5096, __pyx_L4_error)
 05099:                     'null into a boolean column.')
 05100:             else:
+05101:                 raise QuestDBError(
        /*else*/ {
          __pyx_t_11 = NULL;
          __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5101, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_16);
+05102:                     QuestDBErrorCode.BadDataFrame,
          __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 5102, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5102, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+05103:                     f'Bad column {df_col_name!r} at row {i}: expected bool, '
          __pyx_t_13 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 5103, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_14 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5103, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_14);
/* … */
          __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_18, 7, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13) + 8 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14) + 21 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17));
          if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5103, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __pyx_t_9 = 1;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(PyMethod_Check(__pyx_t_16))) {
            __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_16);
            assert(__pyx_t_11);
            PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_16);
            __Pyx_INCREF(__pyx_t_11);
            __Pyx_INCREF(__pyx__function);
            __Pyx_DECREF_SET(__pyx_t_16, __pyx__function);
            __pyx_t_9 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_11, __pyx_t_10, __pyx_t_12};
            __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_16, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__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_12); __pyx_t_12 = 0;
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5101, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_8);
          }
          __Pyx_Raise(__pyx_t_8, 0, 0, 0);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __PYX_ERR(0, 5101, __pyx_L4_error)
        }
        __pyx_L14:;
      }
+05104:                     f'got {_fqn(type(<object>cell))}.')
          __pyx_t_12 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5104, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_17 = __Pyx_PyUnicode_Unicode(__pyx_t_12); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5104, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_17);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __pyx_t_18[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
          __pyx_t_18[1] = __pyx_t_13;
          __pyx_t_18[2] = __pyx_mstate_global->__pyx_kp_u_at_row;
          __pyx_t_18[3] = __pyx_t_14;
          __pyx_t_18[4] = __pyx_mstate_global->__pyx_kp_u_expected_bool_got;
          __pyx_t_18[5] = __pyx_t_17;
          __pyx_t_18[6] = __pyx_mstate_global->__pyx_kp_u__2;
+05105:     except:
    /*except:*/ {
      __Pyx_AddTraceback("questdb._client._dataframe_columnar_build_bool_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_16, &__pyx_t_12) < 0) __PYX_ERR(0, 5105, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_16);
      __Pyx_XGOTREF(__pyx_t_12);
+05106:         pyobj_built_free(b)
      __pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+05107:         raise
      __Pyx_GIVEREF(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_16);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_ErrRestoreWithState(__pyx_t_8, __pyx_t_16, __pyx_t_12);
      __pyx_t_8 = 0;  __pyx_t_16 = 0;  __pyx_t_12 = 0; 
      __PYX_ERR(0, 5107, __pyx_L6_except_error)
    }
 05108: 
+05109:     return b
  __pyx_r = __pyx_v_b;
  goto __pyx_L0;
 05110: 
 05111: 
+05112: cdef pyobj_built_t* _dataframe_columnar_build_uuid_pyobj(
static struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_f_7questdb_7_client__dataframe_columnar_build_uuid_pyobj(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count, PyObject *__pyx_v_df_col_name) {
  struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_b;
  PyObject **__pyx_v_access;
  PyObject *__pyx_v_cell;
  PyObject *__pyx_v_cell_ref = 0;
  uint8_t *__pyx_v_buf;
  size_t __pyx_v_buf_bytes;
  size_t __pyx_v_validity_bytes;
  size_t __pyx_v_i;
  PyObject *__pyx_v_be_bytes = 0;
  PyObject *__pyx_v_uuid_cls = 0;
  PyObject *__pyx_v_int_to_bytes = 0;
  struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_AddTraceback("questdb._client._dataframe_columnar_build_uuid_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_cell_ref);
  __Pyx_XDECREF(__pyx_v_be_bytes);
  __Pyx_XDECREF(__pyx_v_uuid_cls);
  __Pyx_XDECREF(__pyx_v_int_to_bytes);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 05113:         col_t* col,
 05114:         size_t row_count,
 05115:         object df_col_name) except NULL:
+05116:     cdef pyobj_built_t* b = <pyobj_built_t*>calloc(1, sizeof(pyobj_built_t))
  __pyx_v_b = ((struct __pyx_t_7questdb_7_client_pyobj_built_t *)calloc(1, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t))));
+05117:     if b == NULL:
  __pyx_t_1 = (__pyx_v_b == NULL);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+05118:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 5118, __pyx_L1_error)
+05119:     b.row_count = row_count
  __pyx_v_b->row_count = __pyx_v_row_count;
 05120: 
+05121:     cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
  __pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
 05122:     cdef PyObject* cell
 05123:     # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
 05124:     cdef object cell_ref
+05125:     cdef uint8_t* buf = NULL
  __pyx_v_buf = NULL;
+05126:     cdef size_t buf_bytes = row_count * 16 if row_count > 0 else 16
  __pyx_t_1 = (__pyx_v_row_count > 0);
  if (__pyx_t_1) {
    __pyx_t_2 = (__pyx_v_row_count * 16);
  } else {
    __pyx_t_2 = 16;
  }
  __pyx_v_buf_bytes = __pyx_t_2;
+05127:     cdef size_t validity_bytes = (row_count + 7) // 8
  __pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
 05128:     cdef size_t i
 05129:     cdef bytes be_bytes
+05130:     cdef object uuid_cls = _uuid.UUID
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_uuid_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5130, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_UUID); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5130, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_uuid_cls = __pyx_t_4;
  __pyx_t_4 = 0;
+05131:     cdef object int_to_bytes = int.to_bytes
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)(&PyLong_Type)), __pyx_mstate_global->__pyx_n_u_to_bytes); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5131, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_int_to_bytes = __pyx_t_4;
  __pyx_t_4 = 0;
 05132: 
+05133:     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_10); __pyx_t_10 = 0;
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    __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;
    __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_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_L9_try_end:;
  }
+05134:         buf = <uint8_t*>calloc(buf_bytes, sizeof(uint8_t))
      __pyx_v_buf = ((uint8_t *)calloc(__pyx_v_buf_bytes, (sizeof(uint8_t))));
+05135:         if buf == NULL:
      __pyx_t_1 = (__pyx_v_buf == NULL);
      if (unlikely(__pyx_t_1)) {
/* … */
      }
+05136:             raise MemoryError()
        PyErr_NoMemory(); __PYX_ERR(0, 5136, __pyx_L4_error)
+05137:         b.data = <void*>buf
      __pyx_v_b->data = ((void *)__pyx_v_buf);
+05138:         if validity_bytes > 0:
      __pyx_t_1 = (__pyx_v_validity_bytes > 0);
      if (__pyx_t_1) {
/* … */
      }
+05139:             b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
        __pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+05140:             if b.validity == NULL:
        __pyx_t_1 = (__pyx_v_b->validity == NULL);
        if (unlikely(__pyx_t_1)) {
/* … */
        }
+05141:                 raise MemoryError()
          PyErr_NoMemory(); __PYX_ERR(0, 5141, __pyx_L4_error)
+05142:         for i in range(row_count):
      __pyx_t_2 = __pyx_v_row_count;
      __pyx_t_8 = __pyx_t_2;
      for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
        __pyx_v_i = __pyx_t_9;
+05143:             cell_ref = <object>access[i]
        __pyx_t_4 = ((PyObject *)(__pyx_v_access[__pyx_v_i]));
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_XDECREF_SET(__pyx_v_cell_ref, __pyx_t_4);
        __pyx_t_4 = 0;
+05144:             cell = <PyObject*>cell_ref
        __pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+05145:             if isinstance(<object>cell, uuid_cls):
        __pyx_t_1 = PyObject_IsInstance(((PyObject *)__pyx_v_cell), __pyx_v_uuid_cls); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 5145, __pyx_L4_error)
        if (__pyx_t_1) {
/* … */
          goto __pyx_L15;
        }
 05146:                 # `qwp_numpy_s16` reads canonical RFC 4122 big-endian
 05147:                 # rows and byte-swaps them into QWP wire order itself.
 05148:                 # `int.to_bytes` is called unbound so that a replaced
 05149:                 # `UUID.int` cannot narrow the result: it is always the
 05150:                 # 16 bytes `UUID.bytes` would give, in one C-implemented
 05151:                 # call plus one 16-byte memcpy per row.
+05152:                 be_bytes = int_to_bytes((<object>cell).int, 16, 'big')
          __pyx_t_3 = NULL;
          __Pyx_INCREF(__pyx_v_int_to_bytes);
          __pyx_t_10 = __pyx_v_int_to_bytes; 
          __pyx_t_11 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_cell), __pyx_mstate_global->__pyx_n_u_int); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5152, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_12 = 1;
          #if CYTHON_UNPACK_METHODS
          if (likely(PyMethod_Check(__pyx_t_10))) {
            __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_10);
            assert(__pyx_t_3);
            PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_10);
            __Pyx_INCREF(__pyx_t_3);
            __Pyx_INCREF(__pyx__function);
            __Pyx_DECREF_SET(__pyx_t_10, __pyx__function);
            __pyx_t_12 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[4] = {__pyx_t_3, __pyx_t_11, __pyx_mstate_global->__pyx_int_16, __pyx_mstate_global->__pyx_n_u_big};
            __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_10, __pyx_callargs+__pyx_t_12, (4-__pyx_t_12) | (__pyx_t_12*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
            if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5152, __pyx_L4_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(0, 5152, __pyx_L4_error)
          __Pyx_XDECREF_SET(__pyx_v_be_bytes, ((PyObject*)__pyx_t_4));
          __pyx_t_4 = 0;
+05153:                 memcpy(buf + i * 16, PyBytes_AsString(be_bytes), 16)
          __pyx_t_13 = PyBytes_AsString(__pyx_v_be_bytes); if (unlikely(__pyx_t_13 == ((void *)NULL))) __PYX_ERR(0, 5153, __pyx_L4_error)
          (void)(memcpy((__pyx_v_buf + (__pyx_v_i * 16)), __pyx_t_13, 16));
+05154:                 if b.validity != NULL:
          __pyx_t_1 = (__pyx_v_b->validity != NULL);
          if (__pyx_t_1) {
/* … */
          }
+05155:                     _pyobj_set_validity_bit(b.validity, i)
            __pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
+05156:             elif _dataframe_is_null_pyobj(cell):
        __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(__pyx_v_cell);
        if (likely(__pyx_t_1)) {
/* … */
          goto __pyx_L15;
        }
+05157:                 b.has_nulls = True
          __pyx_v_b->has_nulls = 1;
 05158:             else:
+05159:                 raise QuestDBError(
        /*else*/ {
          __pyx_t_10 = NULL;
          __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5159, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_11);
+05160:                     QuestDBErrorCode.BadDataFrame,
          __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5160, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5160, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_14);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+05161:                     f'Bad column {df_col_name!r} at row {i}: expected UUID, '
          __pyx_t_3 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5161, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_15 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5161, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_15);
/* … */
          __pyx_t_16 = __Pyx_PyUnicode_Join(__pyx_t_18, 7, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + 8 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15) + 21 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17));
          if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5161, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_16);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __pyx_t_12 = 1;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(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[3] = {__pyx_t_10, __pyx_t_14, __pyx_t_16};
            __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __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_14); __pyx_t_14 = 0;
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5159, __pyx_L4_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(0, 5159, __pyx_L4_error)
        }
        __pyx_L15:;
      }
+05162:                     f'got {_fqn(type(<object>cell))}.')
          __pyx_t_16 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5162, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_16);
          __pyx_t_17 = __Pyx_PyUnicode_Unicode(__pyx_t_16); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5162, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_17);
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          __pyx_t_18[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
          __pyx_t_18[1] = __pyx_t_3;
          __pyx_t_18[2] = __pyx_mstate_global->__pyx_kp_u_at_row;
          __pyx_t_18[3] = __pyx_t_15;
          __pyx_t_18[4] = __pyx_mstate_global->__pyx_kp_u_expected_UUID_got;
          __pyx_t_18[5] = __pyx_t_17;
          __pyx_t_18[6] = __pyx_mstate_global->__pyx_kp_u__2;
 05163: 
+05164:         if not b.has_nulls and b.validity != NULL:
      __pyx_t_19 = (!__pyx_v_b->has_nulls);
      if (__pyx_t_19) {
      } else {
        __pyx_t_1 = __pyx_t_19;
        goto __pyx_L18_bool_binop_done;
      }
      __pyx_t_19 = (__pyx_v_b->validity != NULL);
      __pyx_t_1 = __pyx_t_19;
      __pyx_L18_bool_binop_done:;
      if (__pyx_t_1) {
/* … */
      }
+05165:             free(b.validity)
        free(__pyx_v_b->validity);
+05166:             b.validity = NULL
        __pyx_v_b->validity = NULL;
+05167:     except:
    /*except:*/ {
      __Pyx_AddTraceback("questdb._client._dataframe_columnar_build_uuid_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_11, &__pyx_t_16) < 0) __PYX_ERR(0, 5167, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_16);
+05168:         pyobj_built_free(b)
      __pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+05169:         raise
      __Pyx_GIVEREF(__pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_16);
      __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_11, __pyx_t_16);
      __pyx_t_4 = 0;  __pyx_t_11 = 0;  __pyx_t_16 = 0; 
      __PYX_ERR(0, 5169, __pyx_L6_except_error)
    }
 05170: 
+05171:     return b
  __pyx_r = __pyx_v_b;
  goto __pyx_L0;
 05172: 
 05173: 
+05174: cdef pyobj_built_t* _dataframe_columnar_build_ipv4_pyobj(
static struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_f_7questdb_7_client__dataframe_columnar_build_ipv4_pyobj(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count, PyObject *__pyx_v_df_col_name) {
  struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_b;
  PyObject **__pyx_v_access;
  PyObject *__pyx_v_cell;
  PyObject *__pyx_v_cell_ref = 0;
  uint32_t *__pyx_v_values;
  size_t __pyx_v_validity_bytes;
  size_t __pyx_v_i;
  struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_AddTraceback("questdb._client._dataframe_columnar_build_ipv4_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_cell_ref);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 05175:         col_t* col,
 05176:         size_t row_count,
 05177:         object df_col_name) except NULL:
+05178:     cdef pyobj_built_t* b = <pyobj_built_t*>calloc(1, sizeof(pyobj_built_t))
  __pyx_v_b = ((struct __pyx_t_7questdb_7_client_pyobj_built_t *)calloc(1, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t))));
+05179:     if b == NULL:
  __pyx_t_1 = (__pyx_v_b == NULL);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+05180:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 5180, __pyx_L1_error)
+05181:     b.row_count = row_count
  __pyx_v_b->row_count = __pyx_v_row_count;
 05182: 
+05183:     cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
  __pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
 05184:     cdef PyObject* cell
 05185:     # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
 05186:     cdef object cell_ref
+05187:     cdef uint32_t* values = NULL
  __pyx_v_values = NULL;
+05188:     cdef size_t validity_bytes = (row_count + 7) // 8
  __pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
 05189:     cdef size_t i
+05190:     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_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_14); __pyx_t_14 = 0;
    __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
    __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 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_L9_try_end:;
  }
+05191:         values = <uint32_t*>calloc(row_count if row_count > 0 else 1,
      __pyx_t_1 = (__pyx_v_row_count > 0);
      if (__pyx_t_1) {
        __pyx_t_5 = __pyx_v_row_count;
      } else {
        __pyx_t_5 = 1;
      }
/* … */
      __pyx_v_values = ((uint32_t *)calloc(__pyx_t_5, (sizeof(uint32_t))));
 05192:                                    sizeof(uint32_t))
+05193:         if values == NULL:
      __pyx_t_1 = (__pyx_v_values == NULL);
      if (unlikely(__pyx_t_1)) {
/* … */
      }
+05194:             raise MemoryError()
        PyErr_NoMemory(); __PYX_ERR(0, 5194, __pyx_L4_error)
+05195:         b.data = <void*>values
      __pyx_v_b->data = ((void *)__pyx_v_values);
+05196:         if validity_bytes > 0:
      __pyx_t_1 = (__pyx_v_validity_bytes > 0);
      if (__pyx_t_1) {
/* … */
      }
+05197:             b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
        __pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+05198:             if b.validity == NULL:
        __pyx_t_1 = (__pyx_v_b->validity == NULL);
        if (unlikely(__pyx_t_1)) {
/* … */
        }
+05199:                 raise MemoryError()
          PyErr_NoMemory(); __PYX_ERR(0, 5199, __pyx_L4_error)
+05200:         for i in range(row_count):
      __pyx_t_5 = __pyx_v_row_count;
      __pyx_t_6 = __pyx_t_5;
      for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
        __pyx_v_i = __pyx_t_7;
+05201:             cell_ref = <object>access[i]
        __pyx_t_8 = ((PyObject *)(__pyx_v_access[__pyx_v_i]));
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_XDECREF_SET(__pyx_v_cell_ref, __pyx_t_8);
        __pyx_t_8 = 0;
+05202:             cell = <PyObject*>cell_ref
        __pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+05203:             if _is_ipv4_address(<object>cell):
        __pyx_t_1 = __pyx_f_7questdb_7_client__is_ipv4_address(((PyObject *)__pyx_v_cell)); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 5203, __pyx_L4_error)
        if (__pyx_t_1) {
/* … */
          goto __pyx_L15;
        }
+05204:                 values[i] = <uint32_t>int(<object>cell)
          __pyx_t_8 = __Pyx_PyNumber_Int(((PyObject *)__pyx_v_cell)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5204, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_9 = __Pyx_PyLong_As_uint32_t(__pyx_t_8); if (unlikely((__pyx_t_9 == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 5204, __pyx_L4_error)
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          (__pyx_v_values[__pyx_v_i]) = ((uint32_t)__pyx_t_9);
+05205:                 if b.validity != NULL:
          __pyx_t_1 = (__pyx_v_b->validity != NULL);
          if (__pyx_t_1) {
/* … */
          }
+05206:                     _pyobj_set_validity_bit(b.validity, i)
            __pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
+05207:             elif _dataframe_is_null_pyobj(cell):
        __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(__pyx_v_cell);
        if (likely(__pyx_t_1)) {
/* … */
          goto __pyx_L15;
        }
+05208:                 b.has_nulls = True
          __pyx_v_b->has_nulls = 1;
+05209:             elif isinstance(<object>cell, _IPV4_INTERFACE):
        __pyx_t_8 = __pyx_v_7questdb_7_client__IPV4_INTERFACE;
        __Pyx_INCREF(__pyx_t_8);
        __pyx_t_1 = PyObject_IsInstance(((PyObject *)__pyx_v_cell), __pyx_t_8); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 5209, __pyx_L4_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(__pyx_t_1)) {
/* … */
        }
+05210:                 raise QuestDBError(
          __pyx_t_10 = NULL;
          __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5210, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_11);
+05211:                     QuestDBErrorCode.BadDataFrame,
          __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5211, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 5211, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+05212:                     f'Bad column {df_col_name!r} at row {i}: '
          __pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5212, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_14 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5212, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_14);
          __pyx_t_15[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
          __pyx_t_15[1] = __pyx_t_12;
          __pyx_t_15[2] = __pyx_mstate_global->__pyx_kp_u_at_row;
          __pyx_t_15[3] = __pyx_t_14;
          __pyx_t_15[4] = __pyx_mstate_global->__pyx_kp_u_;
          __pyx_t_16 = __Pyx_PyUnicode_Join(__pyx_t_15, 5, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12) + 8 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14) + 2, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12));
          if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5212, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_16);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+05213:                     + _ipv4_interface_df_message(df_col_name))
          __pyx_t_14 = __pyx_f_7questdb_7_client__ipv4_interface_df_message(__pyx_v_df_col_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5213, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_14);
          __pyx_t_12 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlaceSafe(__pyx_t_16, __pyx_t_14); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5213, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __pyx_t_17 = 1;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(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_17 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_10, __pyx_t_13, __pyx_t_12};
            __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_17, (3-__pyx_t_17) | (__pyx_t_17*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 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(0, 5210, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_8);
          }
          __Pyx_Raise(__pyx_t_8, 0, 0, 0);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __PYX_ERR(0, 5210, __pyx_L4_error)
 05214:             else:
+05215:                 raise QuestDBError(
        /*else*/ {
          __pyx_t_11 = NULL;
          __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5215, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_12);
+05216:                     QuestDBErrorCode.BadDataFrame,
          __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 5216, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5216, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+05217:                     f'Bad column {df_col_name!r} at row {i}: expected '
          __pyx_t_13 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 5217, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_14 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5217, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_14);
/* … */
          __pyx_t_16 = __Pyx_PyUnicode_Join(__pyx_t_19, 7, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13) + 8 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14) + 38 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18));
          if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5217, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_16);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __pyx_t_17 = 1;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(PyMethod_Check(__pyx_t_12))) {
            __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_12);
            assert(__pyx_t_11);
            PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_12);
            __Pyx_INCREF(__pyx_t_11);
            __Pyx_INCREF(__pyx__function);
            __Pyx_DECREF_SET(__pyx_t_12, __pyx__function);
            __pyx_t_17 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_11, __pyx_t_10, __pyx_t_16};
            __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_12, __pyx_callargs+__pyx_t_17, (3-__pyx_t_17) | (__pyx_t_17*__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_16); __pyx_t_16 = 0;
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
            if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5215, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_8);
          }
          __Pyx_Raise(__pyx_t_8, 0, 0, 0);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __PYX_ERR(0, 5215, __pyx_L4_error)
        }
        __pyx_L15:;
      }
+05218:                     f'ipaddress.IPv4Address, got {_fqn(type(<object>cell))}.')
          __pyx_t_16 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5218, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_16);
          __pyx_t_18 = __Pyx_PyUnicode_Unicode(__pyx_t_16); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5218, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          __pyx_t_19[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
          __pyx_t_19[1] = __pyx_t_13;
          __pyx_t_19[2] = __pyx_mstate_global->__pyx_kp_u_at_row;
          __pyx_t_19[3] = __pyx_t_14;
          __pyx_t_19[4] = __pyx_mstate_global->__pyx_kp_u_expected_ipaddress_IPv4Address;
          __pyx_t_19[5] = __pyx_t_18;
          __pyx_t_19[6] = __pyx_mstate_global->__pyx_kp_u__2;
 05219: 
+05220:         if not b.has_nulls and b.validity != NULL:
      __pyx_t_20 = (!__pyx_v_b->has_nulls);
      if (__pyx_t_20) {
      } else {
        __pyx_t_1 = __pyx_t_20;
        goto __pyx_L18_bool_binop_done;
      }
      __pyx_t_20 = (__pyx_v_b->validity != NULL);
      __pyx_t_1 = __pyx_t_20;
      __pyx_L18_bool_binop_done:;
      if (__pyx_t_1) {
/* … */
      }
+05221:             free(b.validity)
        free(__pyx_v_b->validity);
+05222:             b.validity = NULL
        __pyx_v_b->validity = NULL;
+05223:     except:
    /*except:*/ {
      __Pyx_AddTraceback("questdb._client._dataframe_columnar_build_ipv4_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_12, &__pyx_t_16) < 0) __PYX_ERR(0, 5223, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_16);
+05224:         pyobj_built_free(b)
      __pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+05225:         raise
      __Pyx_GIVEREF(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_16);
      __Pyx_ErrRestoreWithState(__pyx_t_8, __pyx_t_12, __pyx_t_16);
      __pyx_t_8 = 0;  __pyx_t_12 = 0;  __pyx_t_16 = 0; 
      __PYX_ERR(0, 5225, __pyx_L6_except_error)
    }
 05226: 
+05227:     return b
  __pyx_r = __pyx_v_b;
  goto __pyx_L0;
 05228: 
 05229: 
+05230: cdef inline int64_t _days_from_civil(int y, int m, int d) noexcept nogil:
static CYTHON_INLINE int64_t __pyx_f_7questdb_7_client__days_from_civil(int __pyx_v_y, int __pyx_v_m, int __pyx_v_d) {
  int __pyx_v_y_adj;
  int __pyx_v_era;
  int __pyx_v_yoe;
  int __pyx_v_m_adj;
  int __pyx_v_doy;
  int __pyx_v_doe;
  int64_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+05231:     cdef int y_adj = y - 1 if m <= 2 else y
  __pyx_t_2 = (__pyx_v_m <= 2);
  if (__pyx_t_2) {
    __pyx_t_1 = (__pyx_v_y - 1);
  } else {
    __pyx_t_1 = __pyx_v_y;
  }
  __pyx_v_y_adj = __pyx_t_1;
+05232:     cdef int era = (y_adj if y_adj >= 0 else y_adj - 399) // 400
  __pyx_t_2 = (__pyx_v_y_adj >= 0);
  if (__pyx_t_2) {
    __pyx_t_1 = __pyx_v_y_adj;
  } else {
    __pyx_t_1 = (__pyx_v_y_adj - 0x18F);
  }
  __pyx_v_era = __Pyx_div_long(__pyx_t_1, 0x190, 1);
+05233:     cdef int yoe = y_adj - era * 400
  __pyx_v_yoe = (__pyx_v_y_adj - (__pyx_v_era * 0x190));
+05234:     cdef int m_adj = m - 3 if m > 2 else m + 9
  __pyx_t_2 = (__pyx_v_m > 2);
  if (__pyx_t_2) {
    __pyx_t_1 = (__pyx_v_m - 3);
  } else {
    __pyx_t_1 = (__pyx_v_m + 9);
  }
  __pyx_v_m_adj = __pyx_t_1;
+05235:     cdef int doy = (153 * m_adj + 2) // 5 + d - 1
  __pyx_v_doy = ((__Pyx_div_long(((0x99 * __pyx_v_m_adj) + 2), 5, 1) + __pyx_v_d) - 1);
+05236:     cdef int doe = yoe * 365 + yoe // 4 - yoe // 100 + doy
  __pyx_v_doe = ((((__pyx_v_yoe * 0x16D) + __Pyx_div_long(__pyx_v_yoe, 4, 1)) - __Pyx_div_long(__pyx_v_yoe, 0x64, 1)) + __pyx_v_doy);
+05237:     return <int64_t>era * 146097 + <int64_t>doe - 719468
  __pyx_r = (((((int64_t)__pyx_v_era) * 0x23AB1) + ((int64_t)__pyx_v_doe)) - 0xAFA6C);
  goto __pyx_L0;
 05238: 
 05239: 
+05240: cdef pyobj_built_t* _dataframe_columnar_build_datetime_pyobj(
static struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_f_7questdb_7_client__dataframe_columnar_build_datetime_pyobj(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count, PyObject *__pyx_v_df_col_name) {
  struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_b;
  PyObject **__pyx_v_access;
  PyObject *__pyx_v_cell;
  PyObject *__pyx_v_cell_ref = 0;
  int64_t *__pyx_v_values;
  size_t __pyx_v_validity_bytes;
  size_t __pyx_v_i;
  PyObject *__pyx_v_dt = 0;
  PyObject *__pyx_v_epoch_aware = 0;
  PyObject *__pyx_v_datetime_cls = 0;
  PyObject *__pyx_v_delta = 0;
  int __pyx_v_year;
  int __pyx_v_month;
  int __pyx_v_day;
  int __pyx_v_hour;
  int __pyx_v_minute;
  int __pyx_v_second;
  int __pyx_v_us;
  int64_t __pyx_v_days;
  struct __pyx_t_7questdb_7_client_pyobj_built_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_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_AddTraceback("questdb._client._dataframe_columnar_build_datetime_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_cell_ref);
  __Pyx_XDECREF(__pyx_v_dt);
  __Pyx_XDECREF(__pyx_v_epoch_aware);
  __Pyx_XDECREF(__pyx_v_datetime_cls);
  __Pyx_XDECREF(__pyx_v_delta);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 05241:         col_t* col,
 05242:         size_t row_count,
 05243:         object df_col_name) except NULL:
+05244:     cdef pyobj_built_t* b = <pyobj_built_t*>calloc(1, sizeof(pyobj_built_t))
  __pyx_v_b = ((struct __pyx_t_7questdb_7_client_pyobj_built_t *)calloc(1, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t))));
+05245:     if b == NULL:
  __pyx_t_1 = (__pyx_v_b == NULL);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+05246:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 5246, __pyx_L1_error)
+05247:     b.row_count = row_count
  __pyx_v_b->row_count = __pyx_v_row_count;
 05248: 
+05249:     cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
  __pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
 05250:     cdef PyObject* cell
 05251:     # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
 05252:     cdef object cell_ref
+05253:     cdef int64_t* values = NULL
  __pyx_v_values = NULL;
+05254:     cdef size_t validity_bytes = (row_count + 7) // 8
  __pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
 05255:     cdef size_t i
 05256:     cdef object dt
+05257:     cdef object epoch_aware = datetime.datetime(
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5257, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5257, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_mstate_global->__pyx_tuple[1], __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5257, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_epoch_aware = __pyx_t_4;
  __pyx_t_4 = 0;
+05258:         1970, 1, 1, tzinfo=datetime.timezone.utc)
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5258, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5258, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_timezone); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5258, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_utc); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5258, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_tzinfo, __pyx_t_4) < (0)) __PYX_ERR(0, 5258, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+05259:     cdef object datetime_cls = datetime.datetime
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5259, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5259, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_datetime_cls = __pyx_t_2;
  __pyx_t_2 = 0;
 05260:     cdef object delta
 05261:     cdef int year, month, day, hour, minute, second, us
 05262:     cdef int64_t days
 05263: 
+05264:     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_L9_try_end;
    __pyx_L4_error:;
    __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;
    __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 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_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
    __pyx_L6_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_L9_try_end:;
  }
+05265:         values = <int64_t*>calloc(row_count if row_count > 0 else 1,
      __pyx_t_1 = (__pyx_v_row_count > 0);
      if (__pyx_t_1) {
        __pyx_t_9 = __pyx_v_row_count;
      } else {
        __pyx_t_9 = 1;
      }
/* … */
      __pyx_v_values = ((int64_t *)calloc(__pyx_t_9, (sizeof(int64_t))));
 05266:                                   sizeof(int64_t))
+05267:         if values == NULL:
      __pyx_t_1 = (__pyx_v_values == NULL);
      if (unlikely(__pyx_t_1)) {
/* … */
      }
+05268:             raise MemoryError()
        PyErr_NoMemory(); __PYX_ERR(0, 5268, __pyx_L4_error)
+05269:         b.data = <void*>values
      __pyx_v_b->data = ((void *)__pyx_v_values);
+05270:         if validity_bytes > 0:
      __pyx_t_1 = (__pyx_v_validity_bytes > 0);
      if (__pyx_t_1) {
/* … */
      }
+05271:             b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
        __pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+05272:             if b.validity == NULL:
        __pyx_t_1 = (__pyx_v_b->validity == NULL);
        if (unlikely(__pyx_t_1)) {
/* … */
        }
+05273:                 raise MemoryError()
          PyErr_NoMemory(); __PYX_ERR(0, 5273, __pyx_L4_error)
+05274:         for i in range(row_count):
      __pyx_t_9 = __pyx_v_row_count;
      __pyx_t_10 = __pyx_t_9;
      for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
        __pyx_v_i = __pyx_t_11;
+05275:             cell_ref = <object>access[i]
        __pyx_t_2 = ((PyObject *)(__pyx_v_access[__pyx_v_i]));
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_XDECREF_SET(__pyx_v_cell_ref, __pyx_t_2);
        __pyx_t_2 = 0;
+05276:             cell = <PyObject*>cell_ref
        __pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+05277:             if _dataframe_is_null_pyobj(cell):
        __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(__pyx_v_cell);
        if (__pyx_t_1) {
/* … */
          goto __pyx_L15;
        }
+05278:                 b.has_nulls = True
          __pyx_v_b->has_nulls = 1;
+05279:             elif isinstance(<object>cell, datetime_cls):
        __pyx_t_1 = PyObject_IsInstance(((PyObject *)__pyx_v_cell), __pyx_v_datetime_cls); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 5279, __pyx_L4_error)
        if (likely(__pyx_t_1)) {
/* … */
          goto __pyx_L15;
        }
+05280:                 dt = <object>cell
          __pyx_t_2 = ((PyObject *)__pyx_v_cell);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_XDECREF_SET(__pyx_v_dt, __pyx_t_2);
          __pyx_t_2 = 0;
+05281:                 if dt.tzinfo is None:
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dt, __pyx_mstate_global->__pyx_n_u_tzinfo); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5281, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_1 = (__pyx_t_2 == Py_None);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (__pyx_t_1) {
/* … */
            goto __pyx_L16;
          }
 05282:                     # Fast path: C-level field extraction + Howard
 05283:                     # Hinnant days_from_civil; no Python timedelta /
 05284:                     # int arithmetic per row.
+05285:                     year = PyDateTime_GET_YEAR(dt)
            __pyx_v_year = PyDateTime_GET_YEAR(__pyx_v_dt);
+05286:                     month = PyDateTime_GET_MONTH(dt)
            __pyx_v_month = PyDateTime_GET_MONTH(__pyx_v_dt);
+05287:                     day = PyDateTime_GET_DAY(dt)
            __pyx_v_day = PyDateTime_GET_DAY(__pyx_v_dt);
+05288:                     hour = PyDateTime_DATE_GET_HOUR(dt)
            __pyx_v_hour = PyDateTime_DATE_GET_HOUR(__pyx_v_dt);
+05289:                     minute = PyDateTime_DATE_GET_MINUTE(dt)
            __pyx_v_minute = PyDateTime_DATE_GET_MINUTE(__pyx_v_dt);
+05290:                     second = PyDateTime_DATE_GET_SECOND(dt)
            __pyx_v_second = PyDateTime_DATE_GET_SECOND(__pyx_v_dt);
+05291:                     us = PyDateTime_DATE_GET_MICROSECOND(dt)
            __pyx_v_us = PyDateTime_DATE_GET_MICROSECOND(__pyx_v_dt);
+05292:                     days = _days_from_civil(year, month, day)
            __pyx_v_days = __pyx_f_7questdb_7_client__days_from_civil(__pyx_v_year, __pyx_v_month, __pyx_v_day);
+05293:                     values[i] = (
            (__pyx_v_values[__pyx_v_i]) = (((((__pyx_v_days * ((int64_t)0x141DD76000)) + (((int64_t)__pyx_v_hour) * ((int64_t)0xD693A400))) + (((int64_t)__pyx_v_minute) * 0x3938700)) + (((int64_t)__pyx_v_second) * 0xF4240)) + ((int64_t)__pyx_v_us));
 05294:                         days * <int64_t>86_400_000_000
 05295:                         + <int64_t>hour * <int64_t>3_600_000_000
 05296:                         + <int64_t>minute * 60_000_000
 05297:                         + <int64_t>second * 1_000_000
 05298:                         + <int64_t>us)
 05299:                 else:
+05300:                     delta = dt - epoch_aware
          /*else*/ {
            __pyx_t_2 = PyNumber_Subtract(__pyx_v_dt, __pyx_v_epoch_aware); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5300, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_XDECREF_SET(__pyx_v_delta, __pyx_t_2);
            __pyx_t_2 = 0;
+05301:                     values[i] = (
            (__pyx_v_values[__pyx_v_i]) = (((((int64_t)__pyx_t_12) * ((int64_t)0x141DD76000)) + (((int64_t)__pyx_t_13) * 0xF4240)) + ((int64_t)__pyx_t_14));
          }
          __pyx_L16:;
+05302:                         <int64_t>delta.days * <int64_t>86_400_000_000
            __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_delta, __pyx_mstate_global->__pyx_n_u_days); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5302, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_12 = __Pyx_PyLong_As_int64_t(__pyx_t_2); if (unlikely((__pyx_t_12 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 5302, __pyx_L4_error)
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+05303:                         + <int64_t>delta.seconds * 1_000_000
            __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_delta, __pyx_mstate_global->__pyx_n_u_seconds); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5303, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_13 = __Pyx_PyLong_As_int64_t(__pyx_t_2); if (unlikely((__pyx_t_13 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 5303, __pyx_L4_error)
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+05304:                         + <int64_t>delta.microseconds)
            __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_delta, __pyx_mstate_global->__pyx_n_u_microseconds); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5304, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_14 = __Pyx_PyLong_As_int64_t(__pyx_t_2); if (unlikely((__pyx_t_14 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 5304, __pyx_L4_error)
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+05305:                 if b.validity != NULL:
          __pyx_t_1 = (__pyx_v_b->validity != NULL);
          if (__pyx_t_1) {
/* … */
          }
+05306:                     _pyobj_set_validity_bit(b.validity, i)
            __pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
 05307:             else:
+05308:                 raise QuestDBError(
        /*else*/ {
          __pyx_t_4 = NULL;
          __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5308, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_3);
+05309:                     QuestDBErrorCode.BadDataFrame,
          __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5309, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5309, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+05310:                     f'Bad column {df_col_name!r} at row {i}: expected '
          __pyx_t_5 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5310, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_16 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5310, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_16);
/* … */
          __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_19, 7, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5) + 8 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16) + 34 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18));
          if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5310, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_17);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __pyx_t_20 = 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_20 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_15, __pyx_t_17};
            __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_20, (3-__pyx_t_20) | (__pyx_t_20*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5308, __pyx_L4_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(0, 5308, __pyx_L4_error)
        }
        __pyx_L15:;
      }
+05311:                     f'datetime.datetime, got {_fqn(type(<object>cell))}.')
          __pyx_t_17 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5311, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_17);
          __pyx_t_18 = __Pyx_PyUnicode_Unicode(__pyx_t_17); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5311, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __pyx_t_19[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
          __pyx_t_19[1] = __pyx_t_5;
          __pyx_t_19[2] = __pyx_mstate_global->__pyx_kp_u_at_row;
          __pyx_t_19[3] = __pyx_t_16;
          __pyx_t_19[4] = __pyx_mstate_global->__pyx_kp_u_expected_datetime_datetime_got;
          __pyx_t_19[5] = __pyx_t_18;
          __pyx_t_19[6] = __pyx_mstate_global->__pyx_kp_u__2;
 05312: 
+05313:         if not b.has_nulls and b.validity != NULL:
      __pyx_t_21 = (!__pyx_v_b->has_nulls);
      if (__pyx_t_21) {
      } else {
        __pyx_t_1 = __pyx_t_21;
        goto __pyx_L19_bool_binop_done;
      }
      __pyx_t_21 = (__pyx_v_b->validity != NULL);
      __pyx_t_1 = __pyx_t_21;
      __pyx_L19_bool_binop_done:;
      if (__pyx_t_1) {
/* … */
      }
+05314:             free(b.validity)
        free(__pyx_v_b->validity);
+05315:             b.validity = NULL
        __pyx_v_b->validity = NULL;
+05316:     except:
    /*except:*/ {
      __Pyx_AddTraceback("questdb._client._dataframe_columnar_build_datetime_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_17) < 0) __PYX_ERR(0, 5316, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_2);
      __Pyx_XGOTREF(__pyx_t_3);
      __Pyx_XGOTREF(__pyx_t_17);
+05317:         pyobj_built_free(b)
      __pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+05318:         raise
      __Pyx_GIVEREF(__pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_17);
      __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_3, __pyx_t_17);
      __pyx_t_2 = 0;  __pyx_t_3 = 0;  __pyx_t_17 = 0; 
      __PYX_ERR(0, 5318, __pyx_L6_except_error)
    }
 05319: 
+05320:     return b
  __pyx_r = __pyx_v_b;
  goto __pyx_L0;
 05321: 
 05322: 
+05323: cdef pyobj_built_t* _dataframe_columnar_build_bytes_pyobj(
static struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_f_7questdb_7_client__dataframe_columnar_build_bytes_pyobj(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count, PyObject *__pyx_v_df_col_name) {
  struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_b;
  PyObject **__pyx_v_access;
  PyObject *__pyx_v_cell;
  PyObject *__pyx_v_cell_ref = 0;
  Py_ssize_t __pyx_v_blob_len;
  char const *__pyx_v_blob_buf;
  PyObject *__pyx_v_py_cell = 0;
  Py_buffer __pyx_v_view;
  int __pyx_v_release_view;
  size_t __pyx_v_validity_bytes;
  size_t __pyx_v_bytes_cap;
  uint8_t *__pyx_v_new_bytes;
  size_t __pyx_v_bytes_used;
  size_t __pyx_v_i;
  PyObject *__pyx_v_exc = NULL;
  struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_XDECREF(__pyx_t_21);
  __Pyx_XDECREF(__pyx_t_24);
  __Pyx_XDECREF(__pyx_t_25);
  __Pyx_XDECREF(__pyx_t_26);
  __Pyx_XDECREF(__pyx_t_28);
  __Pyx_AddTraceback("questdb._client._dataframe_columnar_build_bytes_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_cell_ref);
  __Pyx_XDECREF(__pyx_v_py_cell);
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 05324:         col_t* col,
 05325:         size_t row_count,
 05326:         object df_col_name) except NULL:
+05327:     cdef pyobj_built_t* b = <pyobj_built_t*>calloc(1, sizeof(pyobj_built_t))
  __pyx_v_b = ((struct __pyx_t_7questdb_7_client_pyobj_built_t *)calloc(1, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t))));
+05328:     if b == NULL:
  __pyx_t_1 = (__pyx_v_b == NULL);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+05329:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 5329, __pyx_L1_error)
+05330:     b.row_count = row_count
  __pyx_v_b->row_count = __pyx_v_row_count;
 05331: 
+05332:     cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
  __pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
 05333:     cdef PyObject* cell
 05334:     # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
 05335:     cdef object cell_ref
 05336:     cdef Py_ssize_t blob_len
 05337:     cdef const char* blob_buf
 05338:     cdef object py_cell
 05339:     cdef Py_buffer view
 05340:     cdef bint release_view
+05341:     cdef size_t validity_bytes = (row_count + 7) // 8
  __pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
+05342:     cdef size_t bytes_cap = 16
  __pyx_v_bytes_cap = 16;
 05343:     cdef uint8_t* new_bytes
+05344:     cdef size_t bytes_used = 0
  __pyx_v_bytes_used = 0;
 05345:     cdef size_t i
 05346: 
+05347:     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_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;
    __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
    __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
    __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
    __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
    __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
    __Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
    __Pyx_XDECREF(__pyx_t_28); __pyx_t_28 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 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_L9_try_end:;
  }
+05348:         b.str_offsets = <int32_t*>calloc(row_count + 1, sizeof(int32_t))
      __pyx_v_b->str_offsets = ((int32_t *)calloc((__pyx_v_row_count + 1), (sizeof(int32_t))));
+05349:         if b.str_offsets == NULL:
      __pyx_t_1 = (__pyx_v_b->str_offsets == NULL);
      if (unlikely(__pyx_t_1)) {
/* … */
      }
+05350:             raise MemoryError()
        PyErr_NoMemory(); __PYX_ERR(0, 5350, __pyx_L4_error)
+05351:         if validity_bytes > 0:
      __pyx_t_1 = (__pyx_v_validity_bytes > 0);
      if (__pyx_t_1) {
/* … */
      }
+05352:             b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
        __pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+05353:             if b.validity == NULL:
        __pyx_t_1 = (__pyx_v_b->validity == NULL);
        if (unlikely(__pyx_t_1)) {
/* … */
        }
+05354:                 raise MemoryError()
          PyErr_NoMemory(); __PYX_ERR(0, 5354, __pyx_L4_error)
+05355:         b.str_bytes = <uint8_t*>malloc(bytes_cap)
      __pyx_v_b->str_bytes = ((uint8_t *)malloc(__pyx_v_bytes_cap));
+05356:         if b.str_bytes == NULL:
      __pyx_t_1 = (__pyx_v_b->str_bytes == NULL);
      if (unlikely(__pyx_t_1)) {
/* … */
      }
+05357:             raise MemoryError()
        PyErr_NoMemory(); __PYX_ERR(0, 5357, __pyx_L4_error)
 05358: 
+05359:         for i in range(row_count):
      __pyx_t_5 = __pyx_v_row_count;
      __pyx_t_6 = __pyx_t_5;
      for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
        __pyx_v_i = __pyx_t_7;
+05360:             cell_ref = <object>access[i]
        __pyx_t_8 = ((PyObject *)(__pyx_v_access[__pyx_v_i]));
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_XDECREF_SET(__pyx_v_cell_ref, __pyx_t_8);
        __pyx_t_8 = 0;
+05361:             cell = <PyObject*>cell_ref
        __pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+05362:             release_view = False
        __pyx_v_release_view = 0;
+05363:             try:
        /*try:*/ {
+05364:                 if PyBytes_Check(<object>cell):
          __pyx_t_1 = PyBytes_Check(((PyObject *)__pyx_v_cell));
          if (__pyx_t_1) {
/* … */
            goto __pyx_L21;
          }
+05365:                     blob_len = PyBytes_GET_SIZE(<object>cell)
            __pyx_v_blob_len = PyBytes_GET_SIZE(((PyObject *)__pyx_v_cell));
+05366:                     blob_buf = PyBytes_AsString(<object>cell)
            __pyx_t_9 = PyBytes_AsString(((PyObject *)__pyx_v_cell)); if (unlikely(__pyx_t_9 == ((void *)NULL))) __PYX_ERR(0, 5366, __pyx_L19_error)
            __pyx_v_blob_buf = __pyx_t_9;
+05367:                 elif PyByteArray_Check(<object>cell):
          __pyx_t_1 = PyByteArray_Check(((PyObject *)__pyx_v_cell));
          if (__pyx_t_1) {
/* … */
            goto __pyx_L21;
          }
+05368:                     blob_len = PyByteArray_Size(<object>cell)
            __pyx_v_blob_len = PyByteArray_Size(((PyObject *)__pyx_v_cell));
+05369:                     blob_buf = PyByteArray_AsString(<object>cell)
            __pyx_v_blob_buf = PyByteArray_AsString(((PyObject *)__pyx_v_cell));
+05370:                 elif PyMemoryView_Check(<object>cell):
          __pyx_t_1 = PyMemoryView_Check(((PyObject *)__pyx_v_cell));
          if (__pyx_t_1) {
/* … */
            goto __pyx_L21;
          }
+05371:                     py_cell = <object>cell
            __pyx_t_8 = ((PyObject *)__pyx_v_cell);
            __Pyx_INCREF(__pyx_t_8);
            __Pyx_XDECREF_SET(__pyx_v_py_cell, __pyx_t_8);
            __pyx_t_8 = 0;
 05372:                     # A released memoryview raises ValueError from the
 05373:                     # `itemsize` and `c_contiguous` reads, not from
 05374:                     # `PyObject_GetBuffer`, so those reads sit inside the
 05375:                     # handler that names the column and the row.
+05376:                     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_L29_try_end;
              __pyx_L22_error:;
              __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;
              __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
              __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
              __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
              __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
              __pyx_L24_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_L19_error;
              __pyx_L29_try_end:;
            }
+05377:                         if (py_cell.itemsize != 1
                __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_cell, __pyx_mstate_global->__pyx_n_u_itemsize); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5377, __pyx_L22_error)
                __Pyx_GOTREF(__pyx_t_8);
                __pyx_t_13 = (__Pyx_PyLong_BoolNeObjC(__pyx_t_8, __pyx_mstate_global->__pyx_int_1, 1, 0)); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 5377, __pyx_L22_error)
                __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
                if (!__pyx_t_13) {
                } else {
                  __pyx_t_1 = __pyx_t_13;
                  goto __pyx_L31_bool_binop_done;
                }
/* … */
                if (unlikely(__pyx_t_1)) {
/* … */
                }
+05378:                                 or not py_cell.c_contiguous):
                __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_cell, __pyx_mstate_global->__pyx_n_u_c_contiguous); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5378, __pyx_L22_error)
                __Pyx_GOTREF(__pyx_t_8);
                __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 5378, __pyx_L22_error)
                __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
                __pyx_t_14 = (!__pyx_t_13);
                __pyx_t_1 = __pyx_t_14;
                __pyx_L31_bool_binop_done:;
+05379:                             raise QuestDBError(
                  __pyx_t_15 = NULL;
                  __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5379, __pyx_L22_error)
                  __Pyx_GOTREF(__pyx_t_16);
+05380:                                 QuestDBErrorCode.BadDataFrame,
                  __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5380, __pyx_L22_error)
                  __Pyx_GOTREF(__pyx_t_17);
                  __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5380, __pyx_L22_error)
                  __Pyx_GOTREF(__pyx_t_18);
                  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+05381:                                 f'Bad column {df_col_name!r} at row {i}: '
                  __pyx_t_17 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5381, __pyx_L22_error)
                  __Pyx_GOTREF(__pyx_t_17);
                  __pyx_t_19 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5381, __pyx_L22_error)
                  __Pyx_GOTREF(__pyx_t_19);
                  __pyx_t_20[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
                  __pyx_t_20[1] = __pyx_t_17;
                  __pyx_t_20[2] = __pyx_mstate_global->__pyx_kp_u_at_row;
                  __pyx_t_20[3] = __pyx_t_19;
                  __pyx_t_20[4] = __pyx_mstate_global->__pyx_kp_u_memoryview_BINARY_values_must_b;
                  __pyx_t_21 = __Pyx_PyUnicode_Join(__pyx_t_20, 5, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17) + 8 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_19) + 68, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17));
                  if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5381, __pyx_L22_error)
                  __Pyx_GOTREF(__pyx_t_21);
                  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
                  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
                  __pyx_t_22 = 1;
                  #if CYTHON_UNPACK_METHODS
                  if (unlikely(PyMethod_Check(__pyx_t_16))) {
                    __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_16);
                    assert(__pyx_t_15);
                    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_16);
                    __Pyx_INCREF(__pyx_t_15);
                    __Pyx_INCREF(__pyx__function);
                    __Pyx_DECREF_SET(__pyx_t_16, __pyx__function);
                    __pyx_t_22 = 0;
                  }
                  #endif
                  {
                    PyObject *__pyx_callargs[3] = {__pyx_t_15, __pyx_t_18, __pyx_t_21};
                    __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_16, __pyx_callargs+__pyx_t_22, (3-__pyx_t_22) | (__pyx_t_22*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
                    __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
                    __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
                    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
                    if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5379, __pyx_L22_error)
                    __Pyx_GOTREF(__pyx_t_8);
                  }
                  __Pyx_Raise(__pyx_t_8, 0, 0, 0);
                  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
                  __PYX_ERR(0, 5379, __pyx_L22_error)
 05382:                                 'memoryview BINARY values must be '
 05383:                                 'C-contiguous with one-byte items.')
+05384:                         PyObject_GetBuffer(py_cell, &view, PyBUF_SIMPLE)
                __pyx_t_23 = PyObject_GetBuffer(__pyx_v_py_cell, (&__pyx_v_view), PyBUF_SIMPLE); if (unlikely(__pyx_t_23 == ((int)-1))) __PYX_ERR(0, 5384, __pyx_L22_error)
+05385:                     except (BufferError, ValueError) as exc:
              __pyx_t_23 = __Pyx_PyErr_ExceptionMatches2(((PyObject *)(((PyTypeObject*)PyExc_BufferError))), ((PyObject *)(((PyTypeObject*)PyExc_ValueError))));
              if (__pyx_t_23) {
                __Pyx_AddTraceback("questdb._client._dataframe_columnar_build_bytes_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
                if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_16, &__pyx_t_21) < 0) __PYX_ERR(0, 5385, __pyx_L24_except_error)
                __Pyx_XGOTREF(__pyx_t_8);
                __Pyx_XGOTREF(__pyx_t_16);
                __Pyx_XGOTREF(__pyx_t_21);
                __Pyx_INCREF(__pyx_t_16);
                __pyx_v_exc = __pyx_t_16;
                /*try:*/ {
/* … */
                /*finally:*/ {
                  __pyx_L38_error:;
                  /*exception exit:*/{
                    __Pyx_PyThreadState_declare
                    __Pyx_PyThreadState_assign
                    __pyx_t_31 = 0; __pyx_t_32 = 0; __pyx_t_33 = 0; __pyx_t_34 = 0; __pyx_t_35 = 0; __pyx_t_36 = 0;
                    __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
                    __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
                    __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
                    __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
                    __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
                    __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
                    __Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
                    __Pyx_XDECREF(__pyx_t_28); __pyx_t_28 = 0;
                     __Pyx_ExceptionSwap(&__pyx_t_34, &__pyx_t_35, &__pyx_t_36);
                    if ( unlikely(__Pyx_GetException(&__pyx_t_31, &__pyx_t_32, &__pyx_t_33) < 0)) __Pyx_ErrFetch(&__pyx_t_31, &__pyx_t_32, &__pyx_t_33);
                    __Pyx_XGOTREF(__pyx_t_31);
                    __Pyx_XGOTREF(__pyx_t_32);
                    __Pyx_XGOTREF(__pyx_t_33);
                    __Pyx_XGOTREF(__pyx_t_34);
                    __Pyx_XGOTREF(__pyx_t_35);
                    __Pyx_XGOTREF(__pyx_t_36);
                    __pyx_t_23 = __pyx_lineno; __pyx_t_29 = __pyx_clineno; __pyx_t_30 = __pyx_filename;
                    {
                      __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
                    }
                    __Pyx_XGIVEREF(__pyx_t_34);
                    __Pyx_XGIVEREF(__pyx_t_35);
                    __Pyx_XGIVEREF(__pyx_t_36);
                    __Pyx_ExceptionReset(__pyx_t_34, __pyx_t_35, __pyx_t_36);
                    __Pyx_XGIVEREF(__pyx_t_31);
                    __Pyx_XGIVEREF(__pyx_t_32);
                    __Pyx_XGIVEREF(__pyx_t_33);
                    __Pyx_ErrRestore(__pyx_t_31, __pyx_t_32, __pyx_t_33);
                    __pyx_t_31 = 0; __pyx_t_32 = 0; __pyx_t_33 = 0; __pyx_t_34 = 0; __pyx_t_35 = 0; __pyx_t_36 = 0;
                    __pyx_lineno = __pyx_t_23; __pyx_clineno = __pyx_t_29; __pyx_filename = __pyx_t_30;
                    goto __pyx_L24_except_error;
                  }
                }
              }
              goto __pyx_L24_except_error;
+05386:                         raise QuestDBError(
                  __pyx_t_15 = NULL;
                  __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5386, __pyx_L38_error)
                  __Pyx_GOTREF(__pyx_t_19);
+05387:                             QuestDBErrorCode.BadDataFrame,
                  __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5387, __pyx_L38_error)
                  __Pyx_GOTREF(__pyx_t_17);
                  __pyx_t_24 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 5387, __pyx_L38_error)
                  __Pyx_GOTREF(__pyx_t_24);
                  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+05388:                             f'Bad column {df_col_name!r} at row {i}: '
                  __pyx_t_17 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5388, __pyx_L38_error)
                  __Pyx_GOTREF(__pyx_t_17);
                  __pyx_t_25 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 5388, __pyx_L38_error)
                  __Pyx_GOTREF(__pyx_t_25);
/* … */
                  __pyx_t_28 = __Pyx_PyUnicode_Join(__pyx_t_27, 6, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17) + 8 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_25) + 35 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_26), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_26));
                  if (unlikely(!__pyx_t_28)) __PYX_ERR(0, 5388, __pyx_L38_error)
                  __Pyx_GOTREF(__pyx_t_28);
                  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
                  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
                  __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
                  __pyx_t_22 = 1;
                  #if CYTHON_UNPACK_METHODS
                  if (unlikely(PyMethod_Check(__pyx_t_19))) {
                    __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_19);
                    assert(__pyx_t_15);
                    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_19);
                    __Pyx_INCREF(__pyx_t_15);
                    __Pyx_INCREF(__pyx__function);
                    __Pyx_DECREF_SET(__pyx_t_19, __pyx__function);
                    __pyx_t_22 = 0;
                  }
                  #endif
                  {
                    PyObject *__pyx_callargs[3] = {__pyx_t_15, __pyx_t_24, __pyx_t_28};
                    __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_19, __pyx_callargs+__pyx_t_22, (3-__pyx_t_22) | (__pyx_t_22*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
                    __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
                    __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
                    __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0;
                    __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
                    if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5386, __pyx_L38_error)
                    __Pyx_GOTREF(__pyx_t_18);
                  }
+05389:                             f'invalid memoryview BINARY value: {exc}') from exc
                  __pyx_t_26 = __Pyx_PyObject_FormatSimple(__pyx_v_exc, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 5389, __pyx_L38_error)
                  __Pyx_GOTREF(__pyx_t_26);
                  __pyx_t_27[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
                  __pyx_t_27[1] = __pyx_t_17;
                  __pyx_t_27[2] = __pyx_mstate_global->__pyx_kp_u_at_row;
                  __pyx_t_27[3] = __pyx_t_25;
                  __pyx_t_27[4] = __pyx_mstate_global->__pyx_kp_u_invalid_memoryview_BINARY_value;
                  __pyx_t_27[5] = __pyx_t_26;
/* … */
                  __Pyx_Raise(__pyx_t_18, 0, 0, __pyx_v_exc);
                  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
                  __PYX_ERR(0, 5386, __pyx_L38_error)
                }
+05390:                     release_view = True
            __pyx_v_release_view = 1;
+05391:                     blob_len = view.len
            __pyx_t_37 = __pyx_v_view.len;
            __pyx_v_blob_len = __pyx_t_37;
+05392:                     blob_buf = <const char*>view.buf
            __pyx_v_blob_buf = ((char const *)__pyx_v_view.buf);
+05393:                 elif _dataframe_is_null_pyobj(cell):
          __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(__pyx_v_cell);
          if (likely(__pyx_t_1)) {
/* … */
          }
+05394:                     b.str_offsets[i + 1] = <int32_t>bytes_used
            (__pyx_v_b->str_offsets[(__pyx_v_i + 1)]) = ((int32_t)__pyx_v_bytes_used);
+05395:                     b.has_nulls = True
            __pyx_v_b->has_nulls = 1;
+05396:                     continue
            goto __pyx_L16_continue;
 05397:                 else:
+05398:                     raise QuestDBError(
          /*else*/ {
            __pyx_t_16 = NULL;
            __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5398, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_8);
+05399:                         QuestDBErrorCode.BadDataFrame,
            __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5399, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_18);
            __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5399, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_19);
            __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+05400:                         f'Bad column {df_col_name!r} at row {i}: expected '
            __pyx_t_18 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5400, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_18);
            __pyx_t_28 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_28)) __PYX_ERR(0, 5400, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_28);
/* … */
            __pyx_t_24 = __Pyx_PyUnicode_Join(__pyx_t_38, 7, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18) + 8 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_28) + 48 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_15));
            if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 5400, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_24);
            __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
            __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0;
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __pyx_t_22 = 1;
            #if CYTHON_UNPACK_METHODS
            if (unlikely(PyMethod_Check(__pyx_t_8))) {
              __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_8);
              assert(__pyx_t_16);
              PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
              __Pyx_INCREF(__pyx_t_16);
              __Pyx_INCREF(__pyx__function);
              __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
              __pyx_t_22 = 0;
            }
            #endif
            {
              PyObject *__pyx_callargs[3] = {__pyx_t_16, __pyx_t_19, __pyx_t_24};
              __pyx_t_21 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_22, (3-__pyx_t_22) | (__pyx_t_22*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
              __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
              __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
              if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5398, __pyx_L19_error)
              __Pyx_GOTREF(__pyx_t_21);
            }
            __Pyx_Raise(__pyx_t_21, 0, 0, 0);
            __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
            __PYX_ERR(0, 5398, __pyx_L19_error)
          }
          __pyx_L21:;
 05401:                         'bytes, bytearray, or memoryview, '
+05402:                         f'got {_fqn(type(<object>cell))}.')
            __pyx_t_24 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 5402, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_24);
            __pyx_t_15 = __Pyx_PyUnicode_Unicode(__pyx_t_24); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5402, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
            __pyx_t_38[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
            __pyx_t_38[1] = __pyx_t_18;
            __pyx_t_38[2] = __pyx_mstate_global->__pyx_kp_u_at_row;
            __pyx_t_38[3] = __pyx_t_28;
            __pyx_t_38[4] = __pyx_mstate_global->__pyx_kp_u_expected_bytes_bytearray_or_mem;
            __pyx_t_38[5] = __pyx_t_15;
            __pyx_t_38[6] = __pyx_mstate_global->__pyx_kp_u__2;
 05403: 
+05404:                 if bytes_used + <size_t>blob_len > <size_t>2_147_483_647:
          __pyx_t_1 = ((__pyx_v_bytes_used + ((size_t)__pyx_v_blob_len)) > ((size_t)0x7FFFFFFF));
          if (unlikely(__pyx_t_1)) {
/* … */
          }
+05405:                     raise QuestDBError(
            __pyx_t_8 = NULL;
            __Pyx_GetModuleGlobalName(__pyx_t_24, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 5405, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_24);
+05406:                         QuestDBErrorCode.BadDataFrame,
            __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5406, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_19);
            __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5406, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_16);
            __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+05407:                         f'Bad column {df_col_name!r}: column total bytes '
            __pyx_t_19 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5407, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_19);
            __pyx_t_39[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
            __pyx_t_39[1] = __pyx_t_19;
            __pyx_t_39[2] = __pyx_mstate_global->__pyx_kp_u_column_total_bytes_exceeds_the;
            __pyx_t_15 = __Pyx_PyUnicode_Join(__pyx_t_39, 3, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_19) + 76, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_19));
            if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5407, __pyx_L19_error)
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
            __pyx_t_22 = 1;
            #if CYTHON_UNPACK_METHODS
            if (unlikely(PyMethod_Check(__pyx_t_24))) {
              __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_24);
              assert(__pyx_t_8);
              PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_24);
              __Pyx_INCREF(__pyx_t_8);
              __Pyx_INCREF(__pyx__function);
              __Pyx_DECREF_SET(__pyx_t_24, __pyx__function);
              __pyx_t_22 = 0;
            }
            #endif
            {
              PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_16, __pyx_t_15};
              __pyx_t_21 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_24, __pyx_callargs+__pyx_t_22, (3-__pyx_t_22) | (__pyx_t_22*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
              __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
              __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
              __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
              if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5405, __pyx_L19_error)
              __Pyx_GOTREF(__pyx_t_21);
            }
            __Pyx_Raise(__pyx_t_21, 0, 0, 0);
            __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
            __PYX_ERR(0, 5405, __pyx_L19_error)
 05408:                         'exceeds the QWP wire binary offset table '
 05409:                         'limit (2 GiB).')
+05410:                 while bytes_used + <size_t>blob_len > bytes_cap:
          while (1) {
            __pyx_t_1 = ((__pyx_v_bytes_used + ((size_t)__pyx_v_blob_len)) > __pyx_v_bytes_cap);
            if (!__pyx_t_1) break;
+05411:                     bytes_cap *= 2
            __pyx_v_bytes_cap = (__pyx_v_bytes_cap * 2);
+05412:                     new_bytes = <uint8_t*>realloc(b.str_bytes, bytes_cap)
            __pyx_v_new_bytes = ((uint8_t *)realloc(__pyx_v_b->str_bytes, __pyx_v_bytes_cap));
+05413:                     if new_bytes == NULL:
            __pyx_t_1 = (__pyx_v_new_bytes == NULL);
            if (unlikely(__pyx_t_1)) {
/* … */
            }
+05414:                         raise MemoryError()
              PyErr_NoMemory(); __PYX_ERR(0, 5414, __pyx_L19_error)
+05415:                     b.str_bytes = new_bytes
            __pyx_v_b->str_bytes = __pyx_v_new_bytes;
          }
+05416:                 if blob_len > 0:
          __pyx_t_1 = (__pyx_v_blob_len > 0);
          if (__pyx_t_1) {
/* … */
          }
+05417:                     memcpy(b.str_bytes + bytes_used, blob_buf, <size_t>blob_len)
            (void)(memcpy((__pyx_v_b->str_bytes + __pyx_v_bytes_used), __pyx_v_blob_buf, ((size_t)__pyx_v_blob_len)));
+05418:                 bytes_used += <size_t>blob_len
          __pyx_v_bytes_used = (__pyx_v_bytes_used + ((size_t)__pyx_v_blob_len));
+05419:                 b.str_offsets[i + 1] = <int32_t>bytes_used
          (__pyx_v_b->str_offsets[(__pyx_v_i + 1)]) = ((int32_t)__pyx_v_bytes_used);
+05420:                 if b.validity != NULL:
          __pyx_t_1 = (__pyx_v_b->validity != NULL);
          if (__pyx_t_1) {
/* … */
          }
        }
+05421:                     _pyobj_set_validity_bit(b.validity, i)
            __pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
 05422:             finally:
+05423:                 if release_view:
        /*finally:*/ {
          /*normal exit:*/{
            if (__pyx_v_release_view) {
/* … */
            }
            goto __pyx_L20;
          }
          __pyx_L19_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_declare
            __Pyx_PyThreadState_assign
            __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_36 = 0; __pyx_t_35 = 0; __pyx_t_34 = 0;
            __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;
            __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
            __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
            __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
            __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
            __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
            __Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
            __Pyx_XDECREF(__pyx_t_28); __pyx_t_28 = 0;
            __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
             __Pyx_ExceptionSwap(&__pyx_t_36, &__pyx_t_35, &__pyx_t_34);
            if ( unlikely(__Pyx_GetException(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10);
            __Pyx_XGOTREF(__pyx_t_12);
            __Pyx_XGOTREF(__pyx_t_11);
            __Pyx_XGOTREF(__pyx_t_10);
            __Pyx_XGOTREF(__pyx_t_36);
            __Pyx_XGOTREF(__pyx_t_35);
            __Pyx_XGOTREF(__pyx_t_34);
            __pyx_t_29 = __pyx_lineno; __pyx_t_23 = __pyx_clineno; __pyx_t_40 = __pyx_filename;
            {
              if (__pyx_v_release_view) {
/* … */
              }
            }
            __Pyx_XGIVEREF(__pyx_t_36);
            __Pyx_XGIVEREF(__pyx_t_35);
            __Pyx_XGIVEREF(__pyx_t_34);
            __Pyx_ExceptionReset(__pyx_t_36, __pyx_t_35, __pyx_t_34);
            __Pyx_XGIVEREF(__pyx_t_12);
            __Pyx_XGIVEREF(__pyx_t_11);
            __Pyx_XGIVEREF(__pyx_t_10);
            __Pyx_ErrRestore(__pyx_t_12, __pyx_t_11, __pyx_t_10);
            __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_36 = 0; __pyx_t_35 = 0; __pyx_t_34 = 0;
            __pyx_lineno = __pyx_t_29; __pyx_clineno = __pyx_t_23; __pyx_filename = __pyx_t_40;
            goto __pyx_L4_error;
          }
          __pyx_L16_continue: {
            if (__pyx_v_release_view) {
/* … */
            }
            goto __pyx_L14_continue;
          }
          __pyx_L20:;
        }
        __pyx_L14_continue:;
      }
+05424:                     PyBuffer_Release(&view)
              PyBuffer_Release((&__pyx_v_view));
/* … */
                PyBuffer_Release((&__pyx_v_view));
/* … */
              PyBuffer_Release((&__pyx_v_view));
 05425: 
+05426:         b.str_bytes_len = bytes_used
      __pyx_v_b->str_bytes_len = __pyx_v_bytes_used;
+05427:         if not b.has_nulls and b.validity != NULL:
      __pyx_t_14 = (!__pyx_v_b->has_nulls);
      if (__pyx_t_14) {
      } else {
        __pyx_t_1 = __pyx_t_14;
        goto __pyx_L58_bool_binop_done;
      }
      __pyx_t_14 = (__pyx_v_b->validity != NULL);
      __pyx_t_1 = __pyx_t_14;
      __pyx_L58_bool_binop_done:;
      if (__pyx_t_1) {
/* … */
      }
+05428:             free(b.validity)
        free(__pyx_v_b->validity);
+05429:             b.validity = NULL
        __pyx_v_b->validity = NULL;
+05430:     except:
    /*except:*/ {
      __Pyx_AddTraceback("questdb._client._dataframe_columnar_build_bytes_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_21, &__pyx_t_24, &__pyx_t_15) < 0) __PYX_ERR(0, 5430, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_21);
      __Pyx_XGOTREF(__pyx_t_24);
      __Pyx_XGOTREF(__pyx_t_15);
+05431:         pyobj_built_free(b)
      __pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+05432:         raise
      __Pyx_GIVEREF(__pyx_t_21);
      __Pyx_GIVEREF(__pyx_t_24);
      __Pyx_XGIVEREF(__pyx_t_15);
      __Pyx_ErrRestoreWithState(__pyx_t_21, __pyx_t_24, __pyx_t_15);
      __pyx_t_21 = 0;  __pyx_t_24 = 0;  __pyx_t_15 = 0; 
      __PYX_ERR(0, 5432, __pyx_L6_except_error)
    }
 05433: 
+05434:     return b
  __pyx_r = __pyx_v_b;
  goto __pyx_L0;
 05435: 
 05436: 
+05437: cdef pyobj_built_t* _dataframe_columnar_build_fsb_pyobj(
static struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_f_7questdb_7_client__dataframe_columnar_build_fsb_pyobj(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_count, PyObject *__pyx_v_df_col_name, size_t __pyx_v_width, PyObject *__pyx_v_type_name) {
  struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_b;
  PyObject **__pyx_v_access;
  PyObject *__pyx_v_cell;
  PyObject *__pyx_v_cell_ref = 0;
  uint8_t *__pyx_v_buf;
  size_t __pyx_v_buf_bytes;
  size_t __pyx_v_validity_bytes;
  size_t __pyx_v_i;
  Py_ssize_t __pyx_v_blob_len;
  char const *__pyx_v_blob_buf;
  PyObject *__pyx_v_py_cell = 0;
  Py_buffer __pyx_v_view;
  int __pyx_v_release_view;
  PyObject *__pyx_v_exc = NULL;
  struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_XDECREF(__pyx_t_21);
  __Pyx_XDECREF(__pyx_t_24);
  __Pyx_XDECREF(__pyx_t_25);
  __Pyx_XDECREF(__pyx_t_26);
  __Pyx_XDECREF(__pyx_t_28);
  __Pyx_AddTraceback("questdb._client._dataframe_columnar_build_fsb_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_cell_ref);
  __Pyx_XDECREF(__pyx_v_py_cell);
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 05438:         col_t* col,
 05439:         size_t row_count,
 05440:         object df_col_name,
 05441:         size_t width,
 05442:         str type_name) except NULL:
 05443:     """
 05444:     Walk an object column of `bytes` claimed as UUID or LONG256 and
 05445:     produce `width` bytes per row + LSB-packed validity bitmap.
 05446: 
 05447:     ``to_pandas(dtype_backend='numpy_nullable')`` hands a fixed-size
 05448:     binary column back as object-dtype `bytes`, so the raw rows are
 05449:     already in the order the wire wants: canonical RFC 4122 big-endian
 05450:     for UUID, little-endian limbs for LONG256. Every non-null cell must
 05451:     be exactly `width` bytes — a column whose values no longer are is
 05452:     refused rather than written to a column of the claimed type.
 05453:     """
+05454:     cdef pyobj_built_t* b = <pyobj_built_t*>calloc(1, sizeof(pyobj_built_t))
  __pyx_v_b = ((struct __pyx_t_7questdb_7_client_pyobj_built_t *)calloc(1, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t))));
+05455:     if b == NULL:
  __pyx_t_1 = (__pyx_v_b == NULL);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+05456:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 5456, __pyx_L1_error)
+05457:     b.row_count = row_count
  __pyx_v_b->row_count = __pyx_v_row_count;
 05458: 
+05459:     cdef PyObject** access = <PyObject**>col.setup.chunks.chunks[0].buffers[1]
  __pyx_v_access = ((PyObject **)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
 05460:     cdef PyObject* cell
 05461:     # Owns the cell; see `_dataframe_columnar_build_str_pyobj`.
 05462:     cdef object cell_ref
+05463:     cdef uint8_t* buf = NULL
  __pyx_v_buf = NULL;
+05464:     cdef size_t buf_bytes = row_count * width if row_count > 0 else width
  __pyx_t_1 = (__pyx_v_row_count > 0);
  if (__pyx_t_1) {
    __pyx_t_2 = (__pyx_v_row_count * __pyx_v_width);
  } else {
    __pyx_t_2 = __pyx_v_width;
  }
  __pyx_v_buf_bytes = __pyx_t_2;
+05465:     cdef size_t validity_bytes = (row_count + 7) // 8
  __pyx_v_validity_bytes = ((__pyx_v_row_count + 7) / 8);
 05466:     cdef size_t i
 05467:     cdef Py_ssize_t blob_len
 05468:     cdef const char* blob_buf
 05469:     cdef object py_cell
 05470:     cdef Py_buffer view
 05471:     cdef bint release_view
 05472: 
+05473:     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_L9_try_end;
    __pyx_L4_error:;
    __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;
    __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
    __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
    __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
    __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
    __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
    __Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
    __Pyx_XDECREF(__pyx_t_28); __pyx_t_28 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
    __pyx_L6_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_L9_try_end:;
  }
+05474:         buf = <uint8_t*>calloc(buf_bytes, sizeof(uint8_t))
      __pyx_v_buf = ((uint8_t *)calloc(__pyx_v_buf_bytes, (sizeof(uint8_t))));
+05475:         if buf == NULL:
      __pyx_t_1 = (__pyx_v_buf == NULL);
      if (unlikely(__pyx_t_1)) {
/* … */
      }
+05476:             raise MemoryError()
        PyErr_NoMemory(); __PYX_ERR(0, 5476, __pyx_L4_error)
+05477:         b.data = <void*>buf
      __pyx_v_b->data = ((void *)__pyx_v_buf);
+05478:         if validity_bytes > 0:
      __pyx_t_1 = (__pyx_v_validity_bytes > 0);
      if (__pyx_t_1) {
/* … */
      }
+05479:             b.validity = <uint8_t*>calloc(validity_bytes, sizeof(uint8_t))
        __pyx_v_b->validity = ((uint8_t *)calloc(__pyx_v_validity_bytes, (sizeof(uint8_t))));
+05480:             if b.validity == NULL:
        __pyx_t_1 = (__pyx_v_b->validity == NULL);
        if (unlikely(__pyx_t_1)) {
/* … */
        }
+05481:                 raise MemoryError()
          PyErr_NoMemory(); __PYX_ERR(0, 5481, __pyx_L4_error)
+05482:         for i in range(row_count):
      __pyx_t_2 = __pyx_v_row_count;
      __pyx_t_6 = __pyx_t_2;
      for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
        __pyx_v_i = __pyx_t_7;
+05483:             cell_ref = <object>access[i]
        __pyx_t_8 = ((PyObject *)(__pyx_v_access[__pyx_v_i]));
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_XDECREF_SET(__pyx_v_cell_ref, __pyx_t_8);
        __pyx_t_8 = 0;
+05484:             cell = <PyObject*>cell_ref
        __pyx_v_cell = ((PyObject *)__pyx_v_cell_ref);
+05485:             release_view = False
        __pyx_v_release_view = 0;
+05486:             try:
        /*try:*/ {
+05487:                 if PyBytes_Check(<object>cell):
          __pyx_t_1 = PyBytes_Check(((PyObject *)__pyx_v_cell));
          if (__pyx_t_1) {
/* … */
            goto __pyx_L20;
          }
+05488:                     blob_len = PyBytes_GET_SIZE(<object>cell)
            __pyx_v_blob_len = PyBytes_GET_SIZE(((PyObject *)__pyx_v_cell));
+05489:                     blob_buf = PyBytes_AsString(<object>cell)
            __pyx_t_9 = PyBytes_AsString(((PyObject *)__pyx_v_cell)); if (unlikely(__pyx_t_9 == ((void *)NULL))) __PYX_ERR(0, 5489, __pyx_L18_error)
            __pyx_v_blob_buf = __pyx_t_9;
+05490:                 elif PyByteArray_Check(<object>cell):
          __pyx_t_1 = PyByteArray_Check(((PyObject *)__pyx_v_cell));
          if (__pyx_t_1) {
/* … */
            goto __pyx_L20;
          }
+05491:                     blob_len = PyByteArray_Size(<object>cell)
            __pyx_v_blob_len = PyByteArray_Size(((PyObject *)__pyx_v_cell));
+05492:                     blob_buf = PyByteArray_AsString(<object>cell)
            __pyx_v_blob_buf = PyByteArray_AsString(((PyObject *)__pyx_v_cell));
+05493:                 elif PyMemoryView_Check(<object>cell):
          __pyx_t_1 = PyMemoryView_Check(((PyObject *)__pyx_v_cell));
          if (__pyx_t_1) {
/* … */
            goto __pyx_L20;
          }
+05494:                     py_cell = <object>cell
            __pyx_t_8 = ((PyObject *)__pyx_v_cell);
            __Pyx_INCREF(__pyx_t_8);
            __Pyx_XDECREF_SET(__pyx_v_py_cell, __pyx_t_8);
            __pyx_t_8 = 0;
+05495:                     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_L28_try_end;
              __pyx_L21_error:;
              __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;
              __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
              __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
              __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
              __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
              __pyx_L23_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_L18_error;
              __pyx_L28_try_end:;
            }
+05496:                         if (py_cell.itemsize != 1
                __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_cell, __pyx_mstate_global->__pyx_n_u_itemsize); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5496, __pyx_L21_error)
                __Pyx_GOTREF(__pyx_t_8);
                __pyx_t_13 = (__Pyx_PyLong_BoolNeObjC(__pyx_t_8, __pyx_mstate_global->__pyx_int_1, 1, 0)); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 5496, __pyx_L21_error)
                __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
                if (!__pyx_t_13) {
                } else {
                  __pyx_t_1 = __pyx_t_13;
                  goto __pyx_L30_bool_binop_done;
                }
/* … */
                if (unlikely(__pyx_t_1)) {
/* … */
                }
+05497:                                 or not py_cell.c_contiguous):
                __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_cell, __pyx_mstate_global->__pyx_n_u_c_contiguous); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5497, __pyx_L21_error)
                __Pyx_GOTREF(__pyx_t_8);
                __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 5497, __pyx_L21_error)
                __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
                __pyx_t_14 = (!__pyx_t_13);
                __pyx_t_1 = __pyx_t_14;
                __pyx_L30_bool_binop_done:;
+05498:                             raise QuestDBError(
                  __pyx_t_15 = NULL;
                  __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5498, __pyx_L21_error)
                  __Pyx_GOTREF(__pyx_t_16);
+05499:                                 QuestDBErrorCode.BadDataFrame,
                  __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5499, __pyx_L21_error)
                  __Pyx_GOTREF(__pyx_t_17);
                  __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5499, __pyx_L21_error)
                  __Pyx_GOTREF(__pyx_t_18);
                  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+05500:                                 f'Bad column {df_col_name!r} at row {i}: '
                  __pyx_t_17 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5500, __pyx_L21_error)
                  __Pyx_GOTREF(__pyx_t_17);
                  __pyx_t_19 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5500, __pyx_L21_error)
                  __Pyx_GOTREF(__pyx_t_19);
                  __pyx_t_20[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
                  __pyx_t_20[1] = __pyx_t_17;
                  __pyx_t_20[2] = __pyx_mstate_global->__pyx_kp_u_at_row;
                  __pyx_t_20[3] = __pyx_t_19;
                  __pyx_t_20[4] = __pyx_mstate_global->__pyx_kp_u_memoryview_values_must_be_C_con;
                  __pyx_t_21 = __Pyx_PyUnicode_Join(__pyx_t_20, 5, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17) + 8 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_19) + 61, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17));
                  if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5500, __pyx_L21_error)
                  __Pyx_GOTREF(__pyx_t_21);
                  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
                  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
                  __pyx_t_22 = 1;
                  #if CYTHON_UNPACK_METHODS
                  if (unlikely(PyMethod_Check(__pyx_t_16))) {
                    __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_16);
                    assert(__pyx_t_15);
                    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_16);
                    __Pyx_INCREF(__pyx_t_15);
                    __Pyx_INCREF(__pyx__function);
                    __Pyx_DECREF_SET(__pyx_t_16, __pyx__function);
                    __pyx_t_22 = 0;
                  }
                  #endif
                  {
                    PyObject *__pyx_callargs[3] = {__pyx_t_15, __pyx_t_18, __pyx_t_21};
                    __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_16, __pyx_callargs+__pyx_t_22, (3-__pyx_t_22) | (__pyx_t_22*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
                    __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
                    __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
                    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
                    if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5498, __pyx_L21_error)
                    __Pyx_GOTREF(__pyx_t_8);
                  }
                  __Pyx_Raise(__pyx_t_8, 0, 0, 0);
                  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
                  __PYX_ERR(0, 5498, __pyx_L21_error)
 05501:                                 'memoryview values must be C-contiguous '
 05502:                                 'with one-byte items.')
+05503:                         PyObject_GetBuffer(py_cell, &view, PyBUF_SIMPLE)
                __pyx_t_23 = PyObject_GetBuffer(__pyx_v_py_cell, (&__pyx_v_view), PyBUF_SIMPLE); if (unlikely(__pyx_t_23 == ((int)-1))) __PYX_ERR(0, 5503, __pyx_L21_error)
+05504:                     except (BufferError, ValueError) as exc:
              __pyx_t_23 = __Pyx_PyErr_ExceptionMatches2(((PyObject *)(((PyTypeObject*)PyExc_BufferError))), ((PyObject *)(((PyTypeObject*)PyExc_ValueError))));
              if (__pyx_t_23) {
                __Pyx_AddTraceback("questdb._client._dataframe_columnar_build_fsb_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
                if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_16, &__pyx_t_21) < 0) __PYX_ERR(0, 5504, __pyx_L23_except_error)
                __Pyx_XGOTREF(__pyx_t_8);
                __Pyx_XGOTREF(__pyx_t_16);
                __Pyx_XGOTREF(__pyx_t_21);
                __Pyx_INCREF(__pyx_t_16);
                __pyx_v_exc = __pyx_t_16;
                /*try:*/ {
/* … */
                /*finally:*/ {
                  __pyx_L37_error:;
                  /*exception exit:*/{
                    __Pyx_PyThreadState_declare
                    __Pyx_PyThreadState_assign
                    __pyx_t_31 = 0; __pyx_t_32 = 0; __pyx_t_33 = 0; __pyx_t_34 = 0; __pyx_t_35 = 0; __pyx_t_36 = 0;
                    __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
                    __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
                    __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
                    __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
                    __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
                    __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
                    __Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
                    __Pyx_XDECREF(__pyx_t_28); __pyx_t_28 = 0;
                     __Pyx_ExceptionSwap(&__pyx_t_34, &__pyx_t_35, &__pyx_t_36);
                    if ( unlikely(__Pyx_GetException(&__pyx_t_31, &__pyx_t_32, &__pyx_t_33) < 0)) __Pyx_ErrFetch(&__pyx_t_31, &__pyx_t_32, &__pyx_t_33);
                    __Pyx_XGOTREF(__pyx_t_31);
                    __Pyx_XGOTREF(__pyx_t_32);
                    __Pyx_XGOTREF(__pyx_t_33);
                    __Pyx_XGOTREF(__pyx_t_34);
                    __Pyx_XGOTREF(__pyx_t_35);
                    __Pyx_XGOTREF(__pyx_t_36);
                    __pyx_t_23 = __pyx_lineno; __pyx_t_29 = __pyx_clineno; __pyx_t_30 = __pyx_filename;
                    {
                      __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
                    }
                    __Pyx_XGIVEREF(__pyx_t_34);
                    __Pyx_XGIVEREF(__pyx_t_35);
                    __Pyx_XGIVEREF(__pyx_t_36);
                    __Pyx_ExceptionReset(__pyx_t_34, __pyx_t_35, __pyx_t_36);
                    __Pyx_XGIVEREF(__pyx_t_31);
                    __Pyx_XGIVEREF(__pyx_t_32);
                    __Pyx_XGIVEREF(__pyx_t_33);
                    __Pyx_ErrRestore(__pyx_t_31, __pyx_t_32, __pyx_t_33);
                    __pyx_t_31 = 0; __pyx_t_32 = 0; __pyx_t_33 = 0; __pyx_t_34 = 0; __pyx_t_35 = 0; __pyx_t_36 = 0;
                    __pyx_lineno = __pyx_t_23; __pyx_clineno = __pyx_t_29; __pyx_filename = __pyx_t_30;
                    goto __pyx_L23_except_error;
                  }
                }
              }
              goto __pyx_L23_except_error;
+05505:                         raise QuestDBError(
                  __pyx_t_15 = NULL;
                  __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5505, __pyx_L37_error)
                  __Pyx_GOTREF(__pyx_t_19);
+05506:                             QuestDBErrorCode.BadDataFrame,
                  __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5506, __pyx_L37_error)
                  __Pyx_GOTREF(__pyx_t_17);
                  __pyx_t_24 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 5506, __pyx_L37_error)
                  __Pyx_GOTREF(__pyx_t_24);
                  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+05507:                             f'Bad column {df_col_name!r} at row {i}: '
                  __pyx_t_17 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5507, __pyx_L37_error)
                  __Pyx_GOTREF(__pyx_t_17);
                  __pyx_t_25 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 5507, __pyx_L37_error)
                  __Pyx_GOTREF(__pyx_t_25);
/* … */
                  __pyx_t_28 = __Pyx_PyUnicode_Join(__pyx_t_27, 6, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17) + 8 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_25) + 28 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_26), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_26));
                  if (unlikely(!__pyx_t_28)) __PYX_ERR(0, 5507, __pyx_L37_error)
                  __Pyx_GOTREF(__pyx_t_28);
                  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
                  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
                  __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
                  __pyx_t_22 = 1;
                  #if CYTHON_UNPACK_METHODS
                  if (unlikely(PyMethod_Check(__pyx_t_19))) {
                    __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_19);
                    assert(__pyx_t_15);
                    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_19);
                    __Pyx_INCREF(__pyx_t_15);
                    __Pyx_INCREF(__pyx__function);
                    __Pyx_DECREF_SET(__pyx_t_19, __pyx__function);
                    __pyx_t_22 = 0;
                  }
                  #endif
                  {
                    PyObject *__pyx_callargs[3] = {__pyx_t_15, __pyx_t_24, __pyx_t_28};
                    __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_19, __pyx_callargs+__pyx_t_22, (3-__pyx_t_22) | (__pyx_t_22*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
                    __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
                    __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
                    __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0;
                    __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
                    if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5505, __pyx_L37_error)
                    __Pyx_GOTREF(__pyx_t_18);
                  }
+05508:                             f'invalid memoryview value: {exc}') from exc
                  __pyx_t_26 = __Pyx_PyObject_FormatSimple(__pyx_v_exc, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 5508, __pyx_L37_error)
                  __Pyx_GOTREF(__pyx_t_26);
                  __pyx_t_27[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
                  __pyx_t_27[1] = __pyx_t_17;
                  __pyx_t_27[2] = __pyx_mstate_global->__pyx_kp_u_at_row;
                  __pyx_t_27[3] = __pyx_t_25;
                  __pyx_t_27[4] = __pyx_mstate_global->__pyx_kp_u_invalid_memoryview_value;
                  __pyx_t_27[5] = __pyx_t_26;
/* … */
                  __Pyx_Raise(__pyx_t_18, 0, 0, __pyx_v_exc);
                  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
                  __PYX_ERR(0, 5505, __pyx_L37_error)
                }
+05509:                     release_view = True
            __pyx_v_release_view = 1;
+05510:                     blob_len = view.len
            __pyx_t_37 = __pyx_v_view.len;
            __pyx_v_blob_len = __pyx_t_37;
+05511:                     blob_buf = <const char*>view.buf
            __pyx_v_blob_buf = ((char const *)__pyx_v_view.buf);
+05512:                 elif _dataframe_is_null_pyobj(cell):
          __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_is_null_pyobj(__pyx_v_cell);
          if (likely(__pyx_t_1)) {
/* … */
          }
+05513:                     b.has_nulls = True
            __pyx_v_b->has_nulls = 1;
+05514:                     continue
            goto __pyx_L15_continue;
 05515:                 else:
+05516:                     raise QuestDBError(
          /*else*/ {
            __pyx_t_16 = NULL;
            __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5516, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_8);
+05517:                         QuestDBErrorCode.BadDataFrame,
            __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5517, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_18);
            __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5517, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_19);
            __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+05518:                         f'Bad column {df_col_name!r} at row {i}: expected '
            __pyx_t_18 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5518, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_18);
            __pyx_t_28 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_28)) __PYX_ERR(0, 5518, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_28);
/* … */
            __pyx_t_24 = __Pyx_PyUnicode_Join(__pyx_t_38, 7, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18) + 8 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_28) + 48 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_15));
            if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 5518, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_24);
            __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
            __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0;
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __pyx_t_22 = 1;
            #if CYTHON_UNPACK_METHODS
            if (unlikely(PyMethod_Check(__pyx_t_8))) {
              __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_8);
              assert(__pyx_t_16);
              PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
              __Pyx_INCREF(__pyx_t_16);
              __Pyx_INCREF(__pyx__function);
              __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
              __pyx_t_22 = 0;
            }
            #endif
            {
              PyObject *__pyx_callargs[3] = {__pyx_t_16, __pyx_t_19, __pyx_t_24};
              __pyx_t_21 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_22, (3-__pyx_t_22) | (__pyx_t_22*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
              __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
              __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
              if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5516, __pyx_L18_error)
              __Pyx_GOTREF(__pyx_t_21);
            }
            __Pyx_Raise(__pyx_t_21, 0, 0, 0);
            __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
            __PYX_ERR(0, 5516, __pyx_L18_error)
          }
          __pyx_L20:;
 05519:                         'bytes, bytearray, or memoryview, '
+05520:                         f'got {_fqn(type(<object>cell))}.')
            __pyx_t_24 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_cell))))); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 5520, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_24);
            __pyx_t_15 = __Pyx_PyUnicode_Unicode(__pyx_t_24); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5520, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
            __pyx_t_38[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
            __pyx_t_38[1] = __pyx_t_18;
            __pyx_t_38[2] = __pyx_mstate_global->__pyx_kp_u_at_row;
            __pyx_t_38[3] = __pyx_t_28;
            __pyx_t_38[4] = __pyx_mstate_global->__pyx_kp_u_expected_bytes_bytearray_or_mem;
            __pyx_t_38[5] = __pyx_t_15;
            __pyx_t_38[6] = __pyx_mstate_global->__pyx_kp_u__2;
 05521: 
+05522:                 if <size_t>blob_len != width:
          __pyx_t_1 = (((size_t)__pyx_v_blob_len) != __pyx_v_width);
          if (unlikely(__pyx_t_1)) {
/* … */
          }
+05523:                     raise QuestDBError(
            __pyx_t_8 = NULL;
            __Pyx_GetModuleGlobalName(__pyx_t_24, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 5523, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_24);
+05524:                         QuestDBErrorCode.BadDataFrame,
            __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5524, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_19);
            __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5524, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_16);
            __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+05525:                         f'Bad column {df_col_name!r} at row {i}: a '
            __pyx_t_19 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_df_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5525, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_19);
            __pyx_t_15 = __Pyx_PyUnicode_From_size_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5525, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_15);
/* … */
            __pyx_t_25 = __Pyx_PyUnicode_Join(__pyx_t_39, 11, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_19) + 8 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15) + 4 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_28) + 18 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18) + 12 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_26) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_19) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_28));
            if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 5525, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_25);
            __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0;
            __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
            __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
            __pyx_t_22 = 1;
            #if CYTHON_UNPACK_METHODS
            if (unlikely(PyMethod_Check(__pyx_t_24))) {
              __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_24);
              assert(__pyx_t_8);
              PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_24);
              __Pyx_INCREF(__pyx_t_8);
              __Pyx_INCREF(__pyx__function);
              __Pyx_DECREF_SET(__pyx_t_24, __pyx__function);
              __pyx_t_22 = 0;
            }
            #endif
            {
              PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_16, __pyx_t_25};
              __pyx_t_21 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_24, __pyx_callargs+__pyx_t_22, (3-__pyx_t_22) | (__pyx_t_22*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
              __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
              __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
              __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
              if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5523, __pyx_L18_error)
              __Pyx_GOTREF(__pyx_t_21);
            }
            __Pyx_Raise(__pyx_t_21, 0, 0, 0);
            __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
            __PYX_ERR(0, 5523, __pyx_L18_error)
+05526:                         f'{type_name} value is exactly {width} bytes, '
            __pyx_t_28 = __Pyx_PyUnicode_Unicode(__pyx_v_type_name); if (unlikely(!__pyx_t_28)) __PYX_ERR(0, 5526, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_28);
            __pyx_t_18 = __Pyx_PyUnicode_From_size_t(__pyx_v_width, 0, ' ', 'd'); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5526, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_18);
+05527:                         f'got {blob_len}.')
            __pyx_t_26 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_blob_len, 0, ' ', 'd'); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 5527, __pyx_L18_error)
            __Pyx_GOTREF(__pyx_t_26);
            __pyx_t_39[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
            __pyx_t_39[1] = __pyx_t_19;
            __pyx_t_39[2] = __pyx_mstate_global->__pyx_kp_u_at_row;
            __pyx_t_39[3] = __pyx_t_15;
            __pyx_t_39[4] = __pyx_mstate_global->__pyx_kp_u_a;
            __pyx_t_39[5] = __pyx_t_28;
            __pyx_t_39[6] = __pyx_mstate_global->__pyx_kp_u_value_is_exactly;
            __pyx_t_39[7] = __pyx_t_18;
            __pyx_t_39[8] = __pyx_mstate_global->__pyx_kp_u_bytes_got;
            __pyx_t_39[9] = __pyx_t_26;
            __pyx_t_39[10] = __pyx_mstate_global->__pyx_kp_u__2;
+05528:                 memcpy(buf + i * width, blob_buf, width)
          (void)(memcpy((__pyx_v_buf + (__pyx_v_i * __pyx_v_width)), __pyx_v_blob_buf, __pyx_v_width));
+05529:                 if b.validity != NULL:
          __pyx_t_1 = (__pyx_v_b->validity != NULL);
          if (__pyx_t_1) {
/* … */
          }
        }
+05530:                     _pyobj_set_validity_bit(b.validity, i)
            __pyx_f_7questdb_7_client__pyobj_set_validity_bit(__pyx_v_b->validity, __pyx_v_i);
 05531:             finally:
+05532:                 if release_view:
        /*finally:*/ {
          /*normal exit:*/{
            if (__pyx_v_release_view) {
/* … */
            }
            goto __pyx_L19;
          }
          __pyx_L18_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_declare
            __Pyx_PyThreadState_assign
            __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_36 = 0; __pyx_t_35 = 0; __pyx_t_34 = 0;
            __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;
            __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
            __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
            __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
            __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
            __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
            __Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
            __Pyx_XDECREF(__pyx_t_28); __pyx_t_28 = 0;
            __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
             __Pyx_ExceptionSwap(&__pyx_t_36, &__pyx_t_35, &__pyx_t_34);
            if ( unlikely(__Pyx_GetException(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10);
            __Pyx_XGOTREF(__pyx_t_12);
            __Pyx_XGOTREF(__pyx_t_11);
            __Pyx_XGOTREF(__pyx_t_10);
            __Pyx_XGOTREF(__pyx_t_36);
            __Pyx_XGOTREF(__pyx_t_35);
            __Pyx_XGOTREF(__pyx_t_34);
            __pyx_t_29 = __pyx_lineno; __pyx_t_23 = __pyx_clineno; __pyx_t_40 = __pyx_filename;
            {
              if (__pyx_v_release_view) {
/* … */
              }
            }
            __Pyx_XGIVEREF(__pyx_t_36);
            __Pyx_XGIVEREF(__pyx_t_35);
            __Pyx_XGIVEREF(__pyx_t_34);
            __Pyx_ExceptionReset(__pyx_t_36, __pyx_t_35, __pyx_t_34);
            __Pyx_XGIVEREF(__pyx_t_12);
            __Pyx_XGIVEREF(__pyx_t_11);
            __Pyx_XGIVEREF(__pyx_t_10);
            __Pyx_ErrRestore(__pyx_t_12, __pyx_t_11, __pyx_t_10);
            __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_36 = 0; __pyx_t_35 = 0; __pyx_t_34 = 0;
            __pyx_lineno = __pyx_t_29; __pyx_clineno = __pyx_t_23; __pyx_filename = __pyx_t_40;
            goto __pyx_L4_error;
          }
          __pyx_L15_continue: {
            if (__pyx_v_release_view) {
/* … */
            }
            goto __pyx_L13_continue;
          }
          __pyx_L19:;
        }
        __pyx_L13_continue:;
      }
+05533:                     PyBuffer_Release(&view)
              PyBuffer_Release((&__pyx_v_view));
/* … */
                PyBuffer_Release((&__pyx_v_view));
/* … */
              PyBuffer_Release((&__pyx_v_view));
 05534: 
+05535:         if not b.has_nulls and b.validity != NULL:
      __pyx_t_14 = (!__pyx_v_b->has_nulls);
      if (__pyx_t_14) {
      } else {
        __pyx_t_1 = __pyx_t_14;
        goto __pyx_L53_bool_binop_done;
      }
      __pyx_t_14 = (__pyx_v_b->validity != NULL);
      __pyx_t_1 = __pyx_t_14;
      __pyx_L53_bool_binop_done:;
      if (__pyx_t_1) {
/* … */
      }
+05536:             free(b.validity)
        free(__pyx_v_b->validity);
+05537:             b.validity = NULL
        __pyx_v_b->validity = NULL;
+05538:     except:
    /*except:*/ {
      __Pyx_AddTraceback("questdb._client._dataframe_columnar_build_fsb_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_21, &__pyx_t_24, &__pyx_t_25) < 0) __PYX_ERR(0, 5538, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_21);
      __Pyx_XGOTREF(__pyx_t_24);
      __Pyx_XGOTREF(__pyx_t_25);
+05539:         pyobj_built_free(b)
      __pyx_f_7questdb_7_client_pyobj_built_free(__pyx_v_b);
+05540:         raise
      __Pyx_GIVEREF(__pyx_t_21);
      __Pyx_GIVEREF(__pyx_t_24);
      __Pyx_XGIVEREF(__pyx_t_25);
      __Pyx_ErrRestoreWithState(__pyx_t_21, __pyx_t_24, __pyx_t_25);
      __pyx_t_21 = 0;  __pyx_t_24 = 0;  __pyx_t_25 = 0; 
      __PYX_ERR(0, 5540, __pyx_L6_except_error)
    }
 05541: 
+05542:     return b
  __pyx_r = __pyx_v_b;
  goto __pyx_L0;
 05543: 
 05544: 
+05545: cdef void_int _dataframe_columnar_prebuild_pyobj(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_prebuild_pyobj(PyObject *__pyx_v_df, struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan) {
  size_t __pyx_v_i;
  struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col;
  int __pyx_v_any_pyobj;
  PyObject *__pyx_v_col_name = NULL;
  PyObject *__pyx_v_oe = NULL;
  PyObject *__pyx_v_ue = NULL;
  __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_5);
  __Pyx_XDECREF(__pyx_t_6);
  __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_XDECREF(__pyx_t_18);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_XDECREF(__pyx_t_21);
  __Pyx_AddTraceback("questdb._client._dataframe_columnar_prebuild_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_col_name);
  __Pyx_XDECREF(__pyx_v_oe);
  __Pyx_XDECREF(__pyx_v_ue);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 05546:         object df,
 05547:         dataframe_plan_t* plan) except -1:
 05548:     """
 05549:     Walk every PyObject-sourced column once and stash typed buffers on
 05550:     `plan.pyobj_built`. Runs after `validate_plan` and before the chunk
 05551:     emission loop in `QuestDB.dataframe()`.
 05552:     """
 05553:     cdef size_t i
 05554:     cdef col_t* col
+05555:     cdef bint any_pyobj = False
  __pyx_v_any_pyobj = 0;
 05556: 
+05557:     for i in range(plan.col_count):
  __pyx_t_1 = __pyx_v_plan->col_count;
  __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;
+05558:         col = &plan.cols.d[i]
    __pyx_v_col = (&(__pyx_v_plan->cols.d[__pyx_v_i]));
+05559:         if _is_pyobj_source(col.setup.source):
    __pyx_t_4 = __pyx_f_7questdb_7_client__is_pyobj_source(__pyx_v_col->setup->source);
    if (__pyx_t_4) {
/* … */
    }
  }
  __pyx_L4_break:;
+05560:             any_pyobj = True
      __pyx_v_any_pyobj = 1;
+05561:             break
      goto __pyx_L4_break;
+05562:     if not any_pyobj:
  __pyx_t_4 = (!__pyx_v_any_pyobj);
  if (__pyx_t_4) {
/* … */
  }
+05563:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
 05564: 
+05565:     plan.pyobj_built = <pyobj_built_t**>calloc(
  __pyx_v_plan->pyobj_built = ((struct __pyx_t_7questdb_7_client_pyobj_built_t **)calloc(__pyx_v_plan->col_count, (sizeof(struct __pyx_t_7questdb_7_client_pyobj_built_t *))));
 05566:         plan.col_count, sizeof(pyobj_built_t*))
+05567:     if plan.pyobj_built == NULL:
  __pyx_t_4 = (__pyx_v_plan->pyobj_built == NULL);
  if (unlikely(__pyx_t_4)) {
/* … */
  }
+05568:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 5568, __pyx_L1_error)
 05569: 
+05570:     for i in range(plan.col_count):
  __pyx_t_1 = __pyx_v_plan->col_count;
  __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;
+05571:         col = &plan.cols.d[i]
    __pyx_v_col = (&(__pyx_v_plan->cols.d[__pyx_v_i]));
+05572:         if not _is_pyobj_source(col.setup.source):
    __pyx_t_4 = (!__pyx_f_7questdb_7_client__is_pyobj_source(__pyx_v_col->setup->source));
    if (__pyx_t_4) {
/* … */
    }
+05573:             continue
      goto __pyx_L8_continue;
+05574:         col_name = df.columns[col.setup.orig_index]
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5574, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_GetItemInt(__pyx_t_5, __pyx_v_col->setup->orig_index, size_t, 0, __Pyx_PyLong_FromSize_t, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5574, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF_SET(__pyx_v_col_name, __pyx_t_6);
    __pyx_t_6 = 0;
+05575:         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_L18_try_end;
      __pyx_L11_error:;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
      __pyx_L13_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_L18_try_end:;
    }
    __pyx_L8_continue:;
  }
+05576:             if col.setup.source == col_source_t.col_source_str_pyobj:
        switch (__pyx_v_col->setup->source) {
          case __pyx_e_7questdb_7_client_col_source_str_pyobj:
/* … */
          break;
          case __pyx_e_7questdb_7_client_col_source_int_pyobj:
+05577:                 plan.pyobj_built[i] = _dataframe_columnar_build_str_pyobj(
          __pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_str_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5577, __pyx_L11_error)
          (__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
 05578:                     col, plan.row_count, col_name)
+05579:             elif col.setup.source == col_source_t.col_source_int_pyobj:
          break;
          case __pyx_e_7questdb_7_client_col_source_float_pyobj:
+05580:                 if (col.setup.has_override
          if (__pyx_v_col->setup->has_override) {
          } else {
            __pyx_t_4 = __pyx_v_col->setup->has_override;
            goto __pyx_L20_bool_binop_done;
          }
/* … */
          if (__pyx_t_4) {
/* … */
            goto __pyx_L19;
          }
 05581:                         and col.setup.override_dtype
+05582:                             == qwp_numpy_dtype.qwp_numpy_s32):
          __pyx_t_11 = (__pyx_v_col->setup->override_dtype == qwp_numpy_s32);
          __pyx_t_4 = __pyx_t_11;
          __pyx_L20_bool_binop_done:;
+05583:                     plan.pyobj_built[i] = \
            (__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
+05584:                         _dataframe_columnar_build_long256_pyobj(
            __pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_long256_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5584, __pyx_L11_error)
 05585:                             col, plan.row_count, col_name)
 05586:                 else:
+05587:                     plan.pyobj_built[i] = _dataframe_columnar_build_int_pyobj(
          /*else*/ {
/* … */
            __pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_int_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5587, __pyx_L11_error)
/* … */
            (__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
          }
          __pyx_L19:;
 05588:                         col, plan.row_count, col_name)
+05589:             elif col.setup.source == col_source_t.col_source_float_pyobj:
          break;
          case __pyx_e_7questdb_7_client_col_source_bool_pyobj:
+05590:                 plan.pyobj_built[i] = _dataframe_columnar_build_float_pyobj(
          __pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_float_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5590, __pyx_L11_error)
          (__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
 05591:                     col, plan.row_count, col_name)
+05592:             elif col.setup.source == col_source_t.col_source_bool_pyobj:
          break;
          case __pyx_e_7questdb_7_client_col_source_uuid_pyobj:
+05593:                 plan.pyobj_built[i] = _dataframe_columnar_build_bool_pyobj(
          __pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_bool_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5593, __pyx_L11_error)
          (__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
 05594:                     col, plan.row_count, col_name)
+05595:             elif col.setup.source == col_source_t.col_source_uuid_pyobj:
          break;
          case __pyx_e_7questdb_7_client_col_source_ipv4_pyobj:
+05596:                 plan.pyobj_built[i] = _dataframe_columnar_build_uuid_pyobj(
          __pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_uuid_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5596, __pyx_L11_error)
          (__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
 05597:                     col, plan.row_count, col_name)
+05598:             elif col.setup.source == col_source_t.col_source_ipv4_pyobj:
          break;
          case __pyx_e_7questdb_7_client_col_source_datetime_pyobj:
+05599:                 plan.pyobj_built[i] = _dataframe_columnar_build_ipv4_pyobj(
          __pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_ipv4_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5599, __pyx_L11_error)
          (__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
 05600:                     col, plan.row_count, col_name)
+05601:             elif col.setup.source == col_source_t.col_source_datetime_pyobj:
          break;
          case __pyx_e_7questdb_7_client_col_source_bytes_pyobj:
+05602:                 plan.pyobj_built[i] = _dataframe_columnar_build_datetime_pyobj(
          __pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_datetime_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5602, __pyx_L11_error)
          (__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
 05603:                     col, plan.row_count, col_name)
+05604:             elif col.setup.source == col_source_t.col_source_bytes_pyobj:
          break;
          default: break;
        }
+05605:                 if (col.setup.has_override
          if (__pyx_v_col->setup->has_override) {
          } else {
            __pyx_t_4 = __pyx_v_col->setup->has_override;
            goto __pyx_L23_bool_binop_done;
          }
/* … */
          if (__pyx_t_4) {
/* … */
            goto __pyx_L22;
          }
 05606:                         and col.setup.override_dtype
+05607:                             == qwp_numpy_dtype.qwp_numpy_s16):
          __pyx_t_11 = (__pyx_v_col->setup->override_dtype == qwp_numpy_s16);
          __pyx_t_4 = __pyx_t_11;
          __pyx_L23_bool_binop_done:;
+05608:                     plan.pyobj_built[i] = _dataframe_columnar_build_fsb_pyobj(
            __pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_fsb_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name, 16, __pyx_mstate_global->__pyx_n_u_UUID); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5608, __pyx_L11_error)
            (__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
 05609:                         col, plan.row_count, col_name, 16, 'UUID')
+05610:                 elif (col.setup.has_override
          if (__pyx_v_col->setup->has_override) {
          } else {
            __pyx_t_4 = __pyx_v_col->setup->has_override;
            goto __pyx_L25_bool_binop_done;
          }
/* … */
          if (__pyx_t_4) {
/* … */
            goto __pyx_L22;
          }
 05611:                         and col.setup.override_dtype
+05612:                             == qwp_numpy_dtype.qwp_numpy_s32):
          __pyx_t_11 = (__pyx_v_col->setup->override_dtype == qwp_numpy_s32);
          __pyx_t_4 = __pyx_t_11;
          __pyx_L25_bool_binop_done:;
+05613:                     plan.pyobj_built[i] = _dataframe_columnar_build_fsb_pyobj(
            __pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_fsb_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name, 32, __pyx_mstate_global->__pyx_n_u_LONG256); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5613, __pyx_L11_error)
            (__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
 05614:                         col, plan.row_count, col_name, 32, 'LONG256')
 05615:                 else:
+05616:                     plan.pyobj_built[i] = \
            (__pyx_v_plan->pyobj_built[__pyx_v_i]) = __pyx_t_10;
          }
          __pyx_L22:;
+05617:                         _dataframe_columnar_build_bytes_pyobj(
          /*else*/ {
/* … */
            __pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_build_bytes_pyobj(__pyx_v_col, __pyx_v_plan->row_count, __pyx_v_col_name); if (unlikely(__pyx_t_10 == ((void *)NULL))) __PYX_ERR(0, 5617, __pyx_L11_error)
 05618:                             col, plan.row_count, col_name)
+05619:         except OverflowError as oe:
      __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_OverflowError))));
      if (__pyx_t_12) {
        __Pyx_AddTraceback("questdb._client._dataframe_columnar_prebuild_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_13) < 0) __PYX_ERR(0, 5619, __pyx_L13_except_error)
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_5);
        __Pyx_XGOTREF(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_5);
        __pyx_v_oe = __pyx_t_5;
        /*try:*/ {
/* … */
        /*finally:*/ {
          __pyx_L32_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_14); __pyx_t_14 = 0;
            __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;
            __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
            __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
            __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 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;
            {
              __Pyx_DECREF(__pyx_v_oe); __pyx_v_oe = 0;
            }
            __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_L13_except_error;
          }
        }
      }
+05620:             raise QuestDBError(
          __pyx_t_15 = NULL;
          __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5620, __pyx_L32_error)
          __Pyx_GOTREF(__pyx_t_16);
+05621:                 QuestDBErrorCode.BadDataFrame,
          __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5621, __pyx_L32_error)
          __Pyx_GOTREF(__pyx_t_17);
          __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5621, __pyx_L32_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+05622:                 f'Bad column {col_name!r}: {oe}') from oe
          __pyx_t_17 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5622, __pyx_L32_error)
          __Pyx_GOTREF(__pyx_t_17);
          __pyx_t_19 = __Pyx_PyObject_FormatSimple(__pyx_v_oe, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5622, __pyx_L32_error)
          __Pyx_GOTREF(__pyx_t_19);
          __pyx_t_20[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
          __pyx_t_20[1] = __pyx_t_17;
          __pyx_t_20[2] = __pyx_mstate_global->__pyx_kp_u_;
          __pyx_t_20[3] = __pyx_t_19;
          __pyx_t_21 = __Pyx_PyUnicode_Join(__pyx_t_20, 4, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_19), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_19));
          if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5622, __pyx_L32_error)
          __Pyx_GOTREF(__pyx_t_21);
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
          __pyx_t_22 = 1;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(PyMethod_Check(__pyx_t_16))) {
            __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_16);
            assert(__pyx_t_15);
            PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_16);
            __Pyx_INCREF(__pyx_t_15);
            __Pyx_INCREF(__pyx__function);
            __Pyx_DECREF_SET(__pyx_t_16, __pyx__function);
            __pyx_t_22 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_15, __pyx_t_18, __pyx_t_21};
            __pyx_t_14 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_16, __pyx_callargs+__pyx_t_22, (3-__pyx_t_22) | (__pyx_t_22*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
            __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5620, __pyx_L32_error)
            __Pyx_GOTREF(__pyx_t_14);
          }
          __Pyx_Raise(__pyx_t_14, 0, 0, __pyx_v_oe);
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __PYX_ERR(0, 5620, __pyx_L32_error)
        }
+05623:         except UnicodeEncodeError as ue:
      __pyx_t_23 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_UnicodeEncodeError))));
      if (__pyx_t_23) {
        __Pyx_AddTraceback("questdb._client._dataframe_columnar_prebuild_pyobj", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_13, &__pyx_t_5, &__pyx_t_6) < 0) __PYX_ERR(0, 5623, __pyx_L13_except_error)
        __Pyx_XGOTREF(__pyx_t_13);
        __Pyx_XGOTREF(__pyx_t_5);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_5);
        __pyx_v_ue = __pyx_t_5;
        /*try:*/ {
/* … */
        /*finally:*/ {
          __pyx_L43_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_declare
            __Pyx_PyThreadState_assign
            __pyx_t_30 = 0; __pyx_t_29 = 0; __pyx_t_28 = 0; __pyx_t_27 = 0; __pyx_t_26 = 0; __pyx_t_25 = 0;
            __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
            __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;
            __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
            __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
            __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
             __Pyx_ExceptionSwap(&__pyx_t_27, &__pyx_t_26, &__pyx_t_25);
            if ( unlikely(__Pyx_GetException(&__pyx_t_30, &__pyx_t_29, &__pyx_t_28) < 0)) __Pyx_ErrFetch(&__pyx_t_30, &__pyx_t_29, &__pyx_t_28);
            __Pyx_XGOTREF(__pyx_t_30);
            __Pyx_XGOTREF(__pyx_t_29);
            __Pyx_XGOTREF(__pyx_t_28);
            __Pyx_XGOTREF(__pyx_t_27);
            __Pyx_XGOTREF(__pyx_t_26);
            __Pyx_XGOTREF(__pyx_t_25);
            __pyx_t_23 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_31 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_ue); __pyx_v_ue = 0;
            }
            __Pyx_XGIVEREF(__pyx_t_27);
            __Pyx_XGIVEREF(__pyx_t_26);
            __Pyx_XGIVEREF(__pyx_t_25);
            __Pyx_ExceptionReset(__pyx_t_27, __pyx_t_26, __pyx_t_25);
            __Pyx_XGIVEREF(__pyx_t_30);
            __Pyx_XGIVEREF(__pyx_t_29);
            __Pyx_XGIVEREF(__pyx_t_28);
            __Pyx_ErrRestore(__pyx_t_30, __pyx_t_29, __pyx_t_28);
            __pyx_t_30 = 0; __pyx_t_29 = 0; __pyx_t_28 = 0; __pyx_t_27 = 0; __pyx_t_26 = 0; __pyx_t_25 = 0;
            __pyx_lineno = __pyx_t_23; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_31;
            goto __pyx_L13_except_error;
          }
        }
      }
      goto __pyx_L13_except_error;
+05624:             raise QuestDBError(
          __pyx_t_16 = NULL;
          __Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 5624, __pyx_L43_error)
          __Pyx_GOTREF(__pyx_t_21);
+05625:                 QuestDBErrorCode.InvalidUtf8,
          __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5625, __pyx_L43_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_InvalidUtf8); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5625, __pyx_L43_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+05626:                 f'Bad column {col_name!r}: {ue}') from ue
          __pyx_t_18 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 5626, __pyx_L43_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_19 = __Pyx_PyObject_FormatSimple(__pyx_v_ue, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 5626, __pyx_L43_error)
          __Pyx_GOTREF(__pyx_t_19);
          __pyx_t_20[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
          __pyx_t_20[1] = __pyx_t_18;
          __pyx_t_20[2] = __pyx_mstate_global->__pyx_kp_u_;
          __pyx_t_20[3] = __pyx_t_19;
          __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_20, 4, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_19), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_19));
          if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 5626, __pyx_L43_error)
          __Pyx_GOTREF(__pyx_t_17);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
          __pyx_t_22 = 1;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(PyMethod_Check(__pyx_t_21))) {
            __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_21);
            assert(__pyx_t_16);
            PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_21);
            __Pyx_INCREF(__pyx_t_16);
            __Pyx_INCREF(__pyx__function);
            __Pyx_DECREF_SET(__pyx_t_21, __pyx__function);
            __pyx_t_22 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_16, __pyx_t_15, __pyx_t_17};
            __pyx_t_14 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_21, __pyx_callargs+__pyx_t_22, (3-__pyx_t_22) | (__pyx_t_22*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
            __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
            if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5624, __pyx_L43_error)
            __Pyx_GOTREF(__pyx_t_14);
          }
          __Pyx_Raise(__pyx_t_14, 0, 0, __pyx_v_ue);
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __PYX_ERR(0, 5624, __pyx_L43_error)
        }
 05627: 
 05628: 
+05629: cdef void_int _dataframe_columnar_append_pyobj_str(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_append_pyobj_str(struct qwp_chunk *__pyx_v_chunk, struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_prebuilt, size_t __pyx_v_row_offset, size_t __pyx_v_row_count) {
  struct line_sender_error *__pyx_v_err;
  struct qwp_validity __pyx_v_validity;
  struct qwp_validity const *__pyx_v_validity_ptr;
  int __pyx_v_ok;
  int32_t *__pyx_v_offsets;
  size_t __pyx_v_bytes_len;
  __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_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._dataframe_columnar_append_pyobj_str", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 05630:         qwp_chunk* chunk,
 05631:         col_t* col,
 05632:         pyobj_built_t* prebuilt,
 05633:         size_t row_offset,
 05634:         size_t row_count) except -1:
+05635:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 05636:     cdef qwp_validity validity
+05637:     cdef const qwp_validity* validity_ptr = NULL
  __pyx_v_validity_ptr = NULL;
+05638:     cdef bint ok = False
  __pyx_v_ok = 0;
 05639:     cdef int32_t* offsets
 05640:     cdef size_t bytes_len
 05641: 
+05642:     if prebuilt == NULL:
  __pyx_t_1 = (__pyx_v_prebuilt == NULL);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+05643:         raise RuntimeError(
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_PyObject_str_column_missing_pre};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __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(0, 5643, __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(0, 5643, __pyx_L1_error)
 05644:             'PyObject str column missing pre-built buffer; '
 05645:             'prebuild phase did not run.')
+05646:     if prebuilt.has_nulls:
  if (__pyx_v_prebuilt->has_nulls) {
/* … */
  }
+05647:         if row_offset % 8 != 0:
    __pyx_t_1 = ((__pyx_v_row_offset % 8) != 0);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+05648:             raise RuntimeError(
      __pyx_t_3 = NULL;
      __pyx_t_4 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_PyObject_str_column_with_nulls_r};
        __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __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(0, 5648, __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(0, 5648, __pyx_L1_error)
 05649:                 'PyObject str column with nulls requires byte-aligned '
 05650:                 'chunk boundaries.')
+05651:         validity.bits = prebuilt.validity + (row_offset // 8)
    __pyx_v_validity.bits = (__pyx_v_prebuilt->validity + (__pyx_v_row_offset / 8));
+05652:         validity.bit_len = row_count
    __pyx_v_validity.bit_len = __pyx_v_row_count;
+05653:         validity_ptr = &validity
    __pyx_v_validity_ptr = (&__pyx_v_validity);
+05654:     offsets = prebuilt.str_offsets + row_offset
  __pyx_v_offsets = (__pyx_v_prebuilt->str_offsets + __pyx_v_row_offset);
+05655:     bytes_len = prebuilt.str_bytes_len
  __pyx_t_4 = __pyx_v_prebuilt->str_bytes_len;
  __pyx_v_bytes_len = __pyx_t_4;
+05656:     with nogil:
  {
      PyThreadState * _save;
      _save = PyEval_SaveThread();
      __Pyx_FastGIL_Remember();
      /*try:*/ {
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          __Pyx_FastGIL_Forget();
          PyEval_RestoreThread(_save);
          goto __pyx_L8;
        }
        __pyx_L8:;
      }
  }
+05657:         ok = qwp_chunk_column_str(
        __pyx_v_ok = qwp_chunk_column_str(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, __pyx_v_offsets, __pyx_v_prebuilt->str_bytes, __pyx_v_bytes_len, __pyx_v_row_count, __pyx_v_validity_ptr, (&__pyx_v_err));
      }
 05658:             chunk,
 05659:             col.name.buf,
 05660:             col.name.len,
 05661:             offsets,
 05662:             prebuilt.str_bytes,
 05663:             bytes_len,
 05664:             row_count,
 05665:             validity_ptr,
 05666:             &err)
+05667:     if not ok:
  __pyx_t_1 = (!__pyx_v_ok);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+05668:         raise c_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5668, __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(0, 5668, __pyx_L1_error)
 05669: 
 05670: 
+05671: cdef void_int _dataframe_columnar_append_pyobj_simple(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_append_pyobj_simple(struct qwp_chunk *__pyx_v_chunk, struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_prebuilt, size_t __pyx_v_row_offset, size_t __pyx_v_row_count, size_t __pyx_v_elem_size, enum qwp_numpy_dtype __pyx_v_dtype) {
  struct line_sender_error *__pyx_v_err;
  struct qwp_validity __pyx_v_validity;
  struct qwp_validity const *__pyx_v_validity_ptr;
  int __pyx_v_ok;
  __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_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._dataframe_columnar_append_pyobj_simple", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 05672:         qwp_chunk* chunk,
 05673:         col_t* col,
 05674:         pyobj_built_t* prebuilt,
 05675:         size_t row_offset,
 05676:         size_t row_count,
 05677:         size_t elem_size,
 05678:         qwp_numpy_dtype dtype) except -1:
+05679:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 05680:     cdef qwp_validity validity
+05681:     cdef const qwp_validity* validity_ptr = NULL
  __pyx_v_validity_ptr = NULL;
+05682:     cdef bint ok = False
  __pyx_v_ok = 0;
 05683: 
+05684:     if prebuilt == NULL:
  __pyx_t_1 = (__pyx_v_prebuilt == NULL);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+05685:         raise RuntimeError('PyObject column missing pre-built buffer.')
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_PyObject_column_missing_pre_buil};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __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(0, 5685, __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(0, 5685, __pyx_L1_error)
+05686:     if prebuilt.has_nulls:
  if (__pyx_v_prebuilt->has_nulls) {
/* … */
  }
+05687:         if row_offset % 8 != 0:
    __pyx_t_1 = ((__pyx_v_row_offset % 8) != 0);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+05688:             raise RuntimeError(
      __pyx_t_3 = NULL;
      __pyx_t_4 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_PyObject_column_with_nulls_requi};
        __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __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(0, 5688, __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(0, 5688, __pyx_L1_error)
 05689:                 'PyObject column with nulls requires byte-aligned '
 05690:                 'chunk boundaries.')
+05691:         validity.bits = prebuilt.validity + (row_offset // 8)
    __pyx_v_validity.bits = (__pyx_v_prebuilt->validity + (__pyx_v_row_offset / 8));
+05692:         validity.bit_len = row_count
    __pyx_v_validity.bit_len = __pyx_v_row_count;
+05693:         validity_ptr = &validity
    __pyx_v_validity_ptr = (&__pyx_v_validity);
+05694:     with nogil:
  {
      PyThreadState * _save;
      _save = PyEval_SaveThread();
      __Pyx_FastGIL_Remember();
      /*try:*/ {
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          __Pyx_FastGIL_Forget();
          PyEval_RestoreThread(_save);
          goto __pyx_L8;
        }
        __pyx_L8:;
      }
  }
+05695:         ok = qwp_chunk_append_numpy_column(
        __pyx_v_ok = qwp_chunk_append_numpy_column(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, __pyx_v_dtype, (((uint8_t const *)__pyx_v_prebuilt->data) + (__pyx_v_row_offset * __pyx_v_elem_size)), (__pyx_v_row_count * __pyx_v_elem_size), __pyx_v_row_count, __pyx_v_validity_ptr, NULL, (&__pyx_v_err));
      }
 05696:             chunk,
 05697:             col.name.buf,
 05698:             col.name.len,
 05699:             dtype,
 05700:             (<const uint8_t*>prebuilt.data) + row_offset * elem_size,
 05701:             row_count * elem_size,
 05702:             row_count,
 05703:             validity_ptr,
 05704:             NULL,
 05705:             &err)
+05706:     if not ok:
  __pyx_t_1 = (!__pyx_v_ok);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+05707:         raise c_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5707, __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(0, 5707, __pyx_L1_error)
 05708: 
 05709: 
+05710: cdef void_int _dataframe_columnar_append_pyobj_bytes(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_append_pyobj_bytes(struct qwp_chunk *__pyx_v_chunk, struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_prebuilt, size_t __pyx_v_row_offset, size_t __pyx_v_row_count) {
  struct line_sender_error *__pyx_v_err;
  struct qwp_validity __pyx_v_validity;
  struct qwp_validity const *__pyx_v_validity_ptr;
  int __pyx_v_ok;
  __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_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._dataframe_columnar_append_pyobj_bytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 05711:         qwp_chunk* chunk,
 05712:         col_t* col,
 05713:         pyobj_built_t* prebuilt,
 05714:         size_t row_offset,
 05715:         size_t row_count) except -1:
+05716:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 05717:     cdef qwp_validity validity
+05718:     cdef const qwp_validity* validity_ptr = NULL
  __pyx_v_validity_ptr = NULL;
+05719:     cdef bint ok = False
  __pyx_v_ok = 0;
 05720: 
+05721:     if prebuilt == NULL:
  __pyx_t_1 = (__pyx_v_prebuilt == NULL);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+05722:         raise RuntimeError('PyObject bytes column missing pre-built buffer.')
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_PyObject_bytes_column_missing_pr};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __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(0, 5722, __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(0, 5722, __pyx_L1_error)
+05723:     if prebuilt.has_nulls:
  if (__pyx_v_prebuilt->has_nulls) {
/* … */
  }
+05724:         if row_offset % 8 != 0:
    __pyx_t_1 = ((__pyx_v_row_offset % 8) != 0);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+05725:             raise RuntimeError(
      __pyx_t_3 = NULL;
      __pyx_t_4 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_PyObject_bytes_column_with_nulls};
        __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __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(0, 5725, __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(0, 5725, __pyx_L1_error)
 05726:                 'PyObject bytes column with nulls requires byte-aligned '
 05727:                 'chunk boundaries.')
+05728:         validity.bits = prebuilt.validity + (row_offset // 8)
    __pyx_v_validity.bits = (__pyx_v_prebuilt->validity + (__pyx_v_row_offset / 8));
+05729:         validity.bit_len = row_count
    __pyx_v_validity.bit_len = __pyx_v_row_count;
+05730:         validity_ptr = &validity
    __pyx_v_validity_ptr = (&__pyx_v_validity);
+05731:     with nogil:
  {
      PyThreadState * _save;
      _save = PyEval_SaveThread();
      __Pyx_FastGIL_Remember();
      /*try:*/ {
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          __Pyx_FastGIL_Forget();
          PyEval_RestoreThread(_save);
          goto __pyx_L8;
        }
        __pyx_L8:;
      }
  }
+05732:         ok = qwp_chunk_column_binary(
        __pyx_v_ok = qwp_chunk_column_binary(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, (__pyx_v_prebuilt->str_offsets + __pyx_v_row_offset), __pyx_v_prebuilt->str_bytes, __pyx_v_prebuilt->str_bytes_len, __pyx_v_row_count, __pyx_v_validity_ptr, (&__pyx_v_err));
      }
 05733:             chunk,
 05734:             col.name.buf,
 05735:             col.name.len,
 05736:             prebuilt.str_offsets + row_offset,
 05737:             prebuilt.str_bytes,
 05738:             prebuilt.str_bytes_len,
 05739:             row_count,
 05740:             validity_ptr,
 05741:             &err)
+05742:     if not ok:
  __pyx_t_1 = (!__pyx_v_ok);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+05743:         raise c_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5743, __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(0, 5743, __pyx_L1_error)
 05744: 
 05745: 
+05746: cdef void_int _dataframe_columnar_call_arrow_append(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_call_arrow_append(struct qwp_chunk *__pyx_v_chunk, struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, size_t __pyx_v_row_offset, size_t __pyx_v_row_count, struct __pyx_opt_args_7questdb_7_client__dataframe_columnar_call_arrow_append *__pyx_optional_args) {
  enum qwp_symbol_mode __pyx_v_symbol_mode = __pyx_mstate_global->__pyx_k__31;
  struct line_sender_error *__pyx_v_err;
  int __pyx_v_ok;
  struct qwp_arrow_import *__pyx_v_imported;
  __pyx_t_7questdb_7_client_void_int __pyx_r;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_symbol_mode = __pyx_optional_args->symbol_mode;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._dataframe_columnar_call_arrow_append", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_7questdb_7_client__dataframe_columnar_call_arrow_append {
  int __pyx_n;
  enum qwp_symbol_mode symbol_mode;
};
 05747:         qwp_chunk* chunk,
 05748:         col_t* col,
 05749:         size_t row_offset,
 05750:         size_t row_count,
 05751:         qwp_symbol_mode symbol_mode
+05752:             =qwp_symbol_mode_auto) except -1:
  __pyx_mstate_global->__pyx_k__31 = qwp_symbol_mode_auto;
+05753:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+05754:     cdef bint ok = False
  __pyx_v_ok = 0;
+05755:     cdef qwp_arrow_import* imported = col.setup.arrow_import
  __pyx_t_1 = __pyx_v_col->setup->arrow_import;
  __pyx_v_imported = __pyx_t_1;
+05756:     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:;
      }
  }
+05757:         if imported == NULL:
        __pyx_t_2 = (__pyx_v_imported == NULL);
        if (__pyx_t_2) {
/* … */
        }
+05758:             imported = qwp_arrow_import_new(
          __pyx_v_imported = qwp_arrow_import_new((&(__pyx_v_col->setup->chunks.chunks[0])), (&__pyx_v_col->setup->arrow_schema), __pyx_v_symbol_mode, (&__pyx_v_err));
 05759:                 &col.setup.chunks.chunks[0],
 05760:                 &col.setup.arrow_schema,
 05761:                 symbol_mode,
 05762:                 &err)
+05763:         if imported != NULL:
        __pyx_t_2 = (__pyx_v_imported != NULL);
        if (__pyx_t_2) {
/* … */
        }
      }
+05764:             ok = qwp_chunk_append_arrow_import(
          __pyx_v_ok = qwp_chunk_append_arrow_import(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, __pyx_v_imported, __pyx_v_row_offset, __pyx_v_row_count, (&__pyx_v_err));
 05765:                 chunk,
 05766:                 col.name.buf,
 05767:                 col.name.len,
 05768:                 imported,
 05769:                 row_offset,
 05770:                 row_count,
 05771:                 &err)
+05772:     col.setup.arrow_import = imported
  __pyx_v_col->setup->arrow_import = __pyx_v_imported;
+05773:     if not ok:
  __pyx_t_2 = (!__pyx_v_ok);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+05774:         raise c_err_to_py(err)
    __pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5774, __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(0, 5774, __pyx_L1_error)
+05775:     return 0
  __pyx_r = 0;
  goto __pyx_L0;
 05776: 
 05777: 
+05778: cdef str _columnar_col_name(const col_t* col):
static PyObject *__pyx_f_7questdb_7_client__columnar_col_name(struct __pyx_t_7questdb_7_client_col_t const *__pyx_v_col) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client._columnar_col_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 05779:     """A planned column's name as text, for a message naming it."""
+05780:     if col.name.buf == NULL:
  __pyx_t_1 = (__pyx_v_col->name.buf == NULL);
  if (__pyx_t_1) {
/* … */
  }
+05781:         return '?'
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u__32);
    __pyx_r = __pyx_mstate_global->__pyx_kp_u__32;
    goto __pyx_L0;
+05782:     return PyUnicode_FromStringAndSize(
  __Pyx_XDECREF(__pyx_r);
/* … */
  __pyx_t_2 = PyUnicode_FromStringAndSize(__pyx_v_col->name.buf, ((Py_ssize_t)__pyx_v_col->name.len)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5782, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;
 05783:         col.name.buf, <Py_ssize_t>col.name.len)
 05784: 
 05785: 
+05786: cdef void_int _dataframe_columnar_append_field(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_append_field(struct qwp_chunk *__pyx_v_chunk, struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_prebuilt, size_t __pyx_v_row_offset, size_t __pyx_v_row_count) {
  struct line_sender_error *__pyx_v_err;
  struct ArrowArray *__pyx_v_arr;
  void const *__pyx_v_data;
  struct qwp_validity __pyx_v_validity;
  struct qwp_validity const *__pyx_v_validity_ptr;
  int __pyx_v_ok;
  enum qwp_numpy_dtype __pyx_v_numpy_dtype;
  size_t __pyx_v_element_size;
  struct qwp_numpy_extras __pyx_v_extras;
  struct qwp_numpy_extras const *__pyx_v_extras_ptr;
  __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_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("questdb._client._dataframe_columnar_append_field", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 05787:         qwp_chunk* chunk,
 05788:         col_t* col,
 05789:         pyobj_built_t* prebuilt,
 05790:         size_t row_offset,
 05791:         size_t row_count) except -1:
+05792:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+05793:     cdef ArrowArray* arr = &col.setup.chunks.chunks[0]
  __pyx_v_arr = (&(__pyx_v_col->setup->chunks.chunks[0]));
 05794:     cdef ArrowArray* dictionary
+05795:     cdef const void* data = NULL
  __pyx_v_data = NULL;
 05796:     cdef int32_t* offsets
 05797:     cdef int32_t* dict_offsets
 05798:     cdef size_t bytes_len
 05799:     cdef size_t dict_offsets_len
 05800:     cdef size_t dict_bytes_len
 05801:     cdef qwp_validity validity
+05802:     cdef const qwp_validity* validity_ptr = NULL
  __pyx_v_validity_ptr = NULL;
+05803:     cdef bint ok = False
  __pyx_v_ok = 0;
 05804: 
 05805:     cdef qwp_numpy_dtype numpy_dtype
 05806:     cdef size_t element_size
 05807:     cdef qwp_numpy_extras extras
 05808:     cdef const qwp_numpy_extras* extras_ptr
 05809: 
 05810:     # Generic Arrow passthrough owns its complete layout: the native importer
 05811:     # validates and reads the parent buffers and child tree. In particular, a
 05812:     # FixedSizeList legitimately has no buffers[1]. Dispatch it before any
 05813:     # direct-encoder validity or value-buffer read on this side.
+05814:     if col.setup.target == col_target_t.col_target_column_arrow:
  __pyx_t_1 = (__pyx_v_col->setup->target == __pyx_e_7questdb_7_client_col_target_column_arrow);
  if (__pyx_t_1) {
/* … */
  }
+05815:         _dataframe_columnar_call_arrow_append(
    __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_call_arrow_append(__pyx_v_chunk, __pyx_v_col, __pyx_v_row_offset, __pyx_v_row_count, NULL); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 5815, __pyx_L1_error)
 05816:             chunk, col, row_offset, row_count)
+05817:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
 05818: 
 05819:     # pyarrow allocates exactly `n_buffers` pointers, so reading the
 05820:     # value buffer of a column that has fewer reads past the
 05821:     # allocation. The planner turns such a column away, and saying so
 05822:     # here keeps that a property of this read rather than of the checks
 05823:     # upstream of it.
+05824:     if arr.buffers == NULL or arr.n_buffers < 2:
  __pyx_t_3 = (__pyx_v_arr->buffers == NULL);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_3 = (__pyx_v_arr->n_buffers < 2);
  __pyx_t_1 = __pyx_t_3;
  __pyx_L5_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+05825:         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(0, 5825, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
+05826:             QuestDBErrorCode.BadDataFrame,
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5826, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5826, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+05827:             f'Bad column {_columnar_col_name(col)!r}: it arrived '
    __pyx_t_7 = __pyx_f_7questdb_7_client__columnar_col_name(__pyx_v_col); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5827, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_9 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_t_7), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5827, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
    __pyx_t_11 = __Pyx_PyUnicode_Join(__pyx_t_10, 5, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9) + 18 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7) + 44, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9));
    if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5827, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_12 = 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_12 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_8, __pyx_t_11};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_12, (3-__pyx_t_12) | (__pyx_t_12*__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_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5825, __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(0, 5825, __pyx_L1_error)
+05828:             f'with {arr.n_buffers} Arrow buffers, too few to read '
    __pyx_t_7 = __Pyx_PyUnicode_From_int64_t(__pyx_v_arr->n_buffers, 0, ' ', 'd'); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5828, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_10[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
    __pyx_t_10[1] = __pyx_t_9;
    __pyx_t_10[2] = __pyx_mstate_global->__pyx_kp_u_it_arrived_with;
    __pyx_t_10[3] = __pyx_t_7;
    __pyx_t_10[4] = __pyx_mstate_global->__pyx_kp_u_Arrow_buffers_too_few_to_read_v;
 05829:             f'values from.')
+05830:     data = arr.buffers[1]
  __pyx_v_data = (__pyx_v_arr->buffers[1]);
+05831:     validity_ptr = _dataframe_columnar_validity(
  __pyx_t_13 = __pyx_f_7questdb_7_client__dataframe_columnar_validity(__pyx_v_arr, __pyx_v_row_offset, __pyx_v_row_count, (&__pyx_v_validity)); if (unlikely(__pyx_t_13 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 5831, __pyx_L1_error)
  __pyx_v_validity_ptr = __pyx_t_13;
 05832:         arr, row_offset, row_count, &validity)
 05833: 
+05834:     if col.setup.target == col_target_t.col_target_column_bool:
  switch (__pyx_v_col->setup->target) {
    case __pyx_e_7questdb_7_client_col_target_column_bool:
/* … */
    break;
    case __pyx_e_7questdb_7_client_col_target_column_i64:
+05835:         if col.setup.source == col_source_t.col_source_bool_pyobj:
    switch (__pyx_v_col->setup->source) {
      case __pyx_e_7questdb_7_client_col_source_bool_pyobj:
/* … */
      break;
      case __pyx_e_7questdb_7_client_col_source_bool_numpy:
+05836:             if prebuilt == NULL:
      __pyx_t_1 = (__pyx_v_prebuilt == NULL);
      if (unlikely(__pyx_t_1)) {
/* … */
      }
+05837:                 raise RuntimeError(
        __pyx_t_6 = NULL;
        __pyx_t_12 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_PyObject_bool_column_missing_pre};
          __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_12, (2-__pyx_t_12) | (__pyx_t_12*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5837, __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(0, 5837, __pyx_L1_error)
 05838:                     'PyObject bool column missing pre-built bitmap.')
+05839:             if row_offset % 8 != 0:
      __pyx_t_1 = ((__pyx_v_row_offset % 8) != 0);
      if (unlikely(__pyx_t_1)) {
/* … */
      }
+05840:                 raise RuntimeError(
        __pyx_t_6 = NULL;
        __pyx_t_12 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_PyObject_bool_column_requires_by};
          __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_12, (2-__pyx_t_12) | (__pyx_t_12*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5840, __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(0, 5840, __pyx_L1_error)
 05841:                     'PyObject bool column requires byte-aligned chunk boundaries.')
+05842:             with nogil:
      {
          PyThreadState * _save;
          _save = PyEval_SaveThread();
          __Pyx_FastGIL_Remember();
          /*try:*/ {
/* … */
          /*finally:*/ {
            /*normal exit:*/{
              __Pyx_FastGIL_Forget();
              PyEval_RestoreThread(_save);
              goto __pyx_L11;
            }
            __pyx_L11:;
          }
      }
+05843:                 ok = qwp_chunk_column_bool(
            __pyx_v_ok = qwp_chunk_column_bool(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, (((uint8_t const *)__pyx_v_prebuilt->data) + (__pyx_v_row_offset / 8)), __pyx_v_row_count, NULL, (&__pyx_v_err));
          }
 05844:                     chunk,
 05845:                     col.name.buf,
 05846:                     col.name.len,
 05847:                     (<const uint8_t*>prebuilt.data) + (row_offset // 8),
 05848:                     row_count,
 05849:                     NULL,
 05850:                     &err)
+05851:         elif col.setup.source == col_source_t.col_source_bool_numpy:
      break;
      default:
 05852:             # NumPy bool is byte-per-row; Rust packs to LSB-bitmap
 05853:             # inside qwp_chunk_append_numpy_column.
+05854:             with nogil:
      {
          PyThreadState * _save;
          _save = PyEval_SaveThread();
          __Pyx_FastGIL_Remember();
          /*try:*/ {
/* … */
          /*finally:*/ {
            /*normal exit:*/{
              __Pyx_FastGIL_Forget();
              PyEval_RestoreThread(_save);
              goto __pyx_L14;
            }
            __pyx_L14:;
          }
      }
+05855:                 ok = qwp_chunk_append_numpy_column(
            __pyx_v_ok = qwp_chunk_append_numpy_column(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, qwp_numpy_bool, (((uint8_t const *)__pyx_v_data) + __pyx_v_row_offset), __pyx_v_row_count, __pyx_v_row_count, __pyx_v_validity_ptr, NULL, (&__pyx_v_err));
          }
 05856:                     chunk,
 05857:                     col.name.buf,
 05858:                     col.name.len,
 05859:                     qwp_numpy_dtype.qwp_numpy_bool,
 05860:                     (<const uint8_t*>data) + row_offset,
 05861:                     row_count,
 05862:                     row_count,
 05863:                     validity_ptr,
 05864:                     NULL,
 05865:                     &err)
 05866:         else:
+05867:             raise RuntimeError('Unsupported columnar bool source.')
      __pyx_t_6 = NULL;
      __pyx_t_12 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_Unsupported_columnar_bool_source};
        __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_12, (2-__pyx_t_12) | (__pyx_t_12*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5867, __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(0, 5867, __pyx_L1_error)
      break;
    }
+05868:     elif col.setup.target == col_target_t.col_target_column_i64:
    break;
    case __pyx_e_7questdb_7_client_col_target_column_f64:
+05869:         if col.setup.source == col_source_t.col_source_int_pyobj:
    __pyx_t_1 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_int_pyobj);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L15;
    }
+05870:             if prebuilt == NULL:
      __pyx_t_1 = (__pyx_v_prebuilt == NULL);
      if (unlikely(__pyx_t_1)) {
/* … */
      }
+05871:                 raise RuntimeError(
        __pyx_t_6 = NULL;
        __pyx_t_12 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_PyObject_int_column_missing_pre};
          __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_12, (2-__pyx_t_12) | (__pyx_t_12*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5871, __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(0, 5871, __pyx_L1_error)
 05872:                     'PyObject int column missing pre-built buffer.')
+05873:             if prebuilt.has_nulls and row_offset % 8 != 0:
      if (__pyx_v_prebuilt->has_nulls) {
      } else {
        __pyx_t_1 = __pyx_v_prebuilt->has_nulls;
        goto __pyx_L18_bool_binop_done;
      }
      __pyx_t_3 = ((__pyx_v_row_offset % 8) != 0);
      __pyx_t_1 = __pyx_t_3;
      __pyx_L18_bool_binop_done:;
      if (unlikely(__pyx_t_1)) {
/* … */
      }
+05874:                 raise RuntimeError(
        __pyx_t_6 = NULL;
        __pyx_t_12 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_PyObject_int_column_with_nulls_r};
          __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_12, (2-__pyx_t_12) | (__pyx_t_12*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5874, __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(0, 5874, __pyx_L1_error)
 05875:                     'PyObject int column with nulls requires byte-aligned '
 05876:                     'chunk boundaries.')
+05877:             if prebuilt.has_nulls:
      if (__pyx_v_prebuilt->has_nulls) {
/* … */
        goto __pyx_L20;
      }
+05878:                 validity.bits = prebuilt.validity + (row_offset // 8)
        __pyx_v_validity.bits = (__pyx_v_prebuilt->validity + (__pyx_v_row_offset / 8));
+05879:                 validity.bit_len = row_count
        __pyx_v_validity.bit_len = __pyx_v_row_count;
+05880:                 validity_ptr = &validity
        __pyx_v_validity_ptr = (&__pyx_v_validity);
 05881:             else:
+05882:                 validity_ptr = NULL
      /*else*/ {
        __pyx_v_validity_ptr = NULL;
      }
      __pyx_L20:;
 05883:             # A round-trip claim decides the slot width the prebuild
 05884:             # wrote: IPV4 and CHAR narrow it, `long256` widens it to 32
 05885:             # raw bytes, and GEOHASH keeps the int64 slot and carries
 05886:             # its precision in `extras`. Without a claim the column is
 05887:             # an int64 LONG.
+05888:             numpy_dtype = qwp_numpy_dtype.qwp_numpy_i64
      __pyx_v_numpy_dtype = qwp_numpy_i64;
+05889:             element_size = 8
      __pyx_v_element_size = 8;
+05890:             extras_ptr = NULL
      __pyx_v_extras_ptr = NULL;
+05891:             if col.setup.has_override:
      if (__pyx_v_col->setup->has_override) {
/* … */
      }
+05892:                 numpy_dtype = col.setup.override_dtype
        __pyx_t_14 = __pyx_v_col->setup->override_dtype;
        __pyx_v_numpy_dtype = __pyx_t_14;
+05893:                 if numpy_dtype == qwp_numpy_dtype.qwp_numpy_u32_ipv4:
        switch (__pyx_v_numpy_dtype) {
          case qwp_numpy_u32_ipv4:
/* … */
          break;
          case qwp_numpy_u16_char:
+05894:                     element_size = 4
          __pyx_v_element_size = 4;
+05895:                 elif numpy_dtype == qwp_numpy_dtype.qwp_numpy_u16_char:
          break;
          case qwp_numpy_s32:
+05896:                     element_size = 2
          __pyx_v_element_size = 2;
+05897:                 elif numpy_dtype == qwp_numpy_dtype.qwp_numpy_s32:
          break;
          case qwp_numpy_geohash_i64:
+05898:                     element_size = 32
          __pyx_v_element_size = 32;
+05899:                 elif numpy_dtype == qwp_numpy_dtype.qwp_numpy_geohash_i64:
          break;
          default: break;
        }
+05900:                     memset(&extras, 0, sizeof(qwp_numpy_extras))
          (void)(memset((&__pyx_v_extras), 0, (sizeof(struct qwp_numpy_extras))));
+05901:                     extras.geohash_bits = col.setup.override_geohash_bits
          __pyx_t_15 = __pyx_v_col->setup->override_geohash_bits;
          __pyx_v_extras.geohash_bits = __pyx_t_15;
+05902:                     extras_ptr = &extras
          __pyx_v_extras_ptr = (&__pyx_v_extras);
+05903:             with nogil:
      {
          PyThreadState * _save;
          _save = PyEval_SaveThread();
          __Pyx_FastGIL_Remember();
          /*try:*/ {
/* … */
          /*finally:*/ {
            /*normal exit:*/{
              __Pyx_FastGIL_Forget();
              PyEval_RestoreThread(_save);
              goto __pyx_L24;
            }
            __pyx_L24:;
          }
      }
+05904:                 ok = qwp_chunk_append_numpy_column(
            __pyx_v_ok = qwp_chunk_append_numpy_column(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, __pyx_v_numpy_dtype, (((uint8_t const *)__pyx_v_prebuilt->data) + (__pyx_v_row_offset * __pyx_v_element_size)), (__pyx_v_row_count * __pyx_v_element_size), __pyx_v_row_count, __pyx_v_validity_ptr, __pyx_v_extras_ptr, (&__pyx_v_err));
          }
 05905:                     chunk,
 05906:                     col.name.buf,
 05907:                     col.name.len,
 05908:                     numpy_dtype,
 05909:                     (<const uint8_t*>prebuilt.data) + row_offset * element_size,
 05910:                     row_count * element_size,
 05911:                     row_count,
 05912:                     validity_ptr,
 05913:                     extras_ptr,
 05914:                     &err)
 05915:         else:
 05916:             # Rust widens narrow ints to a sentinel-safe wire (i8/i16 → INT,
 05917:             # i32/u32/u64 → LONG); see questdb-rs NumpyDtype::*WidenTo*.
+05918:             if col.setup.source in (
    /*else*/ {
/* … */
      switch (__pyx_v_col->setup->source) {
        case __pyx_e_7questdb_7_client_col_source_i64_numpy:
/* … */
        break;
        case __pyx_e_7questdb_7_client_col_source_i8_numpy:
+05919:                     col_source_t.col_source_i64_numpy,
        case __pyx_e_7questdb_7_client_col_source_i64_arrow:
 05920:                     col_source_t.col_source_i64_arrow):
+05921:                 numpy_dtype = qwp_numpy_dtype.qwp_numpy_i64
        __pyx_v_numpy_dtype = qwp_numpy_i64;
+05922:                 element_size = 8
        __pyx_v_element_size = 8;
+05923:             elif col.setup.source == col_source_t.col_source_i8_numpy:
        break;
        case __pyx_e_7questdb_7_client_col_source_i16_numpy:
+05924:                 numpy_dtype = qwp_numpy_dtype.qwp_numpy_i8
        __pyx_v_numpy_dtype = qwp_numpy_i8;
+05925:                 element_size = 1
        __pyx_v_element_size = 1;
+05926:             elif col.setup.source == col_source_t.col_source_i16_numpy:
        break;
        case __pyx_e_7questdb_7_client_col_source_i32_numpy:
+05927:                 numpy_dtype = qwp_numpy_dtype.qwp_numpy_i16
        __pyx_v_numpy_dtype = qwp_numpy_i16;
+05928:                 element_size = 2
        __pyx_v_element_size = 2;
+05929:             elif col.setup.source == col_source_t.col_source_i32_numpy:
        break;
        case __pyx_e_7questdb_7_client_col_source_u8_numpy:
+05930:                 numpy_dtype = qwp_numpy_dtype.qwp_numpy_i32
        __pyx_v_numpy_dtype = qwp_numpy_i32;
+05931:                 element_size = 4
        __pyx_v_element_size = 4;
+05932:             elif col.setup.source == col_source_t.col_source_u8_numpy:
        break;
        case __pyx_e_7questdb_7_client_col_source_u16_numpy:
+05933:                 numpy_dtype = qwp_numpy_dtype.qwp_numpy_u8
        __pyx_v_numpy_dtype = qwp_numpy_u8;
+05934:                 element_size = 1
        __pyx_v_element_size = 1;
+05935:             elif col.setup.source == col_source_t.col_source_u16_numpy:
        break;
        case __pyx_e_7questdb_7_client_col_source_u32_numpy:
+05936:                 numpy_dtype = qwp_numpy_dtype.qwp_numpy_u16
        __pyx_v_numpy_dtype = qwp_numpy_u16;
+05937:                 element_size = 2
        __pyx_v_element_size = 2;
+05938:             elif col.setup.source in (
        break;
        case __pyx_e_7questdb_7_client_col_source_u64_numpy:
+05939:                     col_source_t.col_source_u32_numpy,
        case __pyx_e_7questdb_7_client_col_source_u32_arrow:
 05940:                     col_source_t.col_source_u32_arrow):
+05941:                 numpy_dtype = qwp_numpy_dtype.qwp_numpy_u32
        __pyx_v_numpy_dtype = qwp_numpy_u32;
+05942:                 element_size = 4
        __pyx_v_element_size = 4;
+05943:             elif col.setup.source == col_source_t.col_source_u64_numpy:
        break;
        default:
+05944:                 numpy_dtype = qwp_numpy_dtype.qwp_numpy_u64
        __pyx_v_numpy_dtype = qwp_numpy_u64;
+05945:                 element_size = 8
        __pyx_v_element_size = 8;
 05946:             else:
+05947:                 raise RuntimeError('Unsupported columnar int source.')
        __pyx_t_6 = NULL;
        __pyx_t_12 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_Unsupported_columnar_int_source};
          __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_12, (2-__pyx_t_12) | (__pyx_t_12*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5947, __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(0, 5947, __pyx_L1_error)
        break;
      }
+05948:             extras_ptr = NULL
      __pyx_v_extras_ptr = NULL;
+05949:             if col.setup.has_override:
      if (__pyx_v_col->setup->has_override) {
/* … */
      }
+05950:                 numpy_dtype = col.setup.override_dtype
        __pyx_t_14 = __pyx_v_col->setup->override_dtype;
        __pyx_v_numpy_dtype = __pyx_t_14;
+05951:                 if (numpy_dtype
        switch (__pyx_v_numpy_dtype) {
          case qwp_numpy_geohash_i8:
/* … */
          break;
          default: break;
        }
+05952:                             == qwp_numpy_dtype.qwp_numpy_geohash_i8
          case qwp_numpy_geohash_i16:
 05953:                         or numpy_dtype
+05954:                             == qwp_numpy_dtype.qwp_numpy_geohash_i16
          case qwp_numpy_geohash_i32:
 05955:                         or numpy_dtype
+05956:                             == qwp_numpy_dtype.qwp_numpy_geohash_i32
          case qwp_numpy_geohash_i64:
 05957:                         or numpy_dtype
 05958:                             == qwp_numpy_dtype.qwp_numpy_geohash_i64):
+05959:                     memset(&extras, 0, sizeof(qwp_numpy_extras))
          (void)(memset((&__pyx_v_extras), 0, (sizeof(struct qwp_numpy_extras))));
+05960:                     extras.geohash_bits = col.setup.override_geohash_bits
          __pyx_t_15 = __pyx_v_col->setup->override_geohash_bits;
          __pyx_v_extras.geohash_bits = __pyx_t_15;
+05961:                     extras_ptr = &extras
          __pyx_v_extras_ptr = (&__pyx_v_extras);
+05962:             with nogil:
      {
          PyThreadState * _save;
          _save = PyEval_SaveThread();
          __Pyx_FastGIL_Remember();
          /*try:*/ {
/* … */
          /*finally:*/ {
            /*normal exit:*/{
              __Pyx_FastGIL_Forget();
              PyEval_RestoreThread(_save);
              goto __pyx_L28;
            }
            __pyx_L28:;
          }
      }
    }
    __pyx_L15:;
+05963:                 ok = qwp_chunk_append_numpy_column(
            __pyx_v_ok = qwp_chunk_append_numpy_column(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, __pyx_v_numpy_dtype, (((uint8_t const *)__pyx_v_data) + (__pyx_v_row_offset * __pyx_v_element_size)), (__pyx_v_row_count * __pyx_v_element_size), __pyx_v_row_count, __pyx_v_validity_ptr, __pyx_v_extras_ptr, (&__pyx_v_err));
          }
 05964:                     chunk,
 05965:                     col.name.buf,
 05966:                     col.name.len,
 05967:                     numpy_dtype,
 05968:                     (<const uint8_t*>data) + row_offset * element_size,
 05969:                     row_count * element_size,
 05970:                     row_count,
 05971:                     validity_ptr,
 05972:                     extras_ptr,
 05973:                     &err)
+05974:     elif col.setup.target == col_target_t.col_target_column_f64:
    break;
    case __pyx_e_7questdb_7_client_col_target_column_ts:
+05975:         if col.setup.source in (
    switch (__pyx_v_col->setup->source) {
      case __pyx_e_7questdb_7_client_col_source_f64_numpy:
/* … */
      break;
      case __pyx_e_7questdb_7_client_col_source_f32_numpy:
+05976:                 col_source_t.col_source_f64_numpy,
      case __pyx_e_7questdb_7_client_col_source_f64_arrow:
 05977:                 col_source_t.col_source_f64_arrow):
+05978:             numpy_dtype = qwp_numpy_dtype.qwp_numpy_f64
      __pyx_v_numpy_dtype = qwp_numpy_f64;
+05979:             element_size = 8
      __pyx_v_element_size = 8;
+05980:             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:;
          }
      }
+05981:                 ok = qwp_chunk_append_numpy_column(
            __pyx_v_ok = qwp_chunk_append_numpy_column(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, __pyx_v_numpy_dtype, (((uint8_t const *)__pyx_v_data) + (__pyx_v_row_offset * __pyx_v_element_size)), (__pyx_v_row_count * __pyx_v_element_size), __pyx_v_row_count, __pyx_v_validity_ptr, NULL, (&__pyx_v_err));
          }
 05982:                     chunk,
 05983:                     col.name.buf,
 05984:                     col.name.len,
 05985:                     numpy_dtype,
 05986:                     (<const uint8_t*>data) + row_offset * element_size,
 05987:                     row_count * element_size,
 05988:                     row_count,
 05989:                     validity_ptr,
 05990:                     NULL,
 05991:                     &err)
+05992:         elif col.setup.source == col_source_t.col_source_f32_numpy:
      break;
      case __pyx_e_7questdb_7_client_col_source_float_pyobj:
 05993:             # numpy f32 maps directly to a FLOAT column on the wire; the
 05994:             # source stride is 4 bytes per row.
+05995:             numpy_dtype = qwp_numpy_dtype.qwp_numpy_f32
      __pyx_v_numpy_dtype = qwp_numpy_f32;
+05996:             element_size = 4
      __pyx_v_element_size = 4;
+05997:             with nogil:
      {
          PyThreadState * _save;
          _save = PyEval_SaveThread();
          __Pyx_FastGIL_Remember();
          /*try:*/ {
/* … */
          /*finally:*/ {
            /*normal exit:*/{
              __Pyx_FastGIL_Forget();
              PyEval_RestoreThread(_save);
              goto __pyx_L34;
            }
            __pyx_L34:;
          }
      }
+05998:                 ok = qwp_chunk_append_numpy_column(
            __pyx_v_ok = qwp_chunk_append_numpy_column(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, __pyx_v_numpy_dtype, (((uint8_t const *)__pyx_v_data) + (__pyx_v_row_offset * __pyx_v_element_size)), (__pyx_v_row_count * __pyx_v_element_size), __pyx_v_row_count, __pyx_v_validity_ptr, NULL, (&__pyx_v_err));
          }
 05999:                     chunk,
 06000:                     col.name.buf,
 06001:                     col.name.len,
 06002:                     numpy_dtype,
 06003:                     (<const uint8_t*>data) + row_offset * element_size,
 06004:                     row_count * element_size,
 06005:                     row_count,
 06006:                     validity_ptr,
 06007:                     NULL,
 06008:                     &err)
+06009:         elif col.setup.source == col_source_t.col_source_float_pyobj:
      break;
      default:
+06010:             if prebuilt == NULL:
      __pyx_t_1 = (__pyx_v_prebuilt == NULL);
      if (unlikely(__pyx_t_1)) {
/* … */
      }
+06011:                 raise RuntimeError(
        __pyx_t_6 = NULL;
        __pyx_t_12 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_PyObject_float_column_missing_pr};
          __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_12, (2-__pyx_t_12) | (__pyx_t_12*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6011, __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(0, 6011, __pyx_L1_error)
 06012:                     'PyObject float column missing pre-built buffer.')
+06013:             if prebuilt.has_nulls and row_offset % 8 != 0:
      if (__pyx_v_prebuilt->has_nulls) {
      } else {
        __pyx_t_1 = __pyx_v_prebuilt->has_nulls;
        goto __pyx_L37_bool_binop_done;
      }
      __pyx_t_3 = ((__pyx_v_row_offset % 8) != 0);
      __pyx_t_1 = __pyx_t_3;
      __pyx_L37_bool_binop_done:;
      if (unlikely(__pyx_t_1)) {
/* … */
      }
+06014:                 raise RuntimeError(
        __pyx_t_6 = NULL;
        __pyx_t_12 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_PyObject_float_column_with_nulls};
          __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_12, (2-__pyx_t_12) | (__pyx_t_12*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6014, __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(0, 6014, __pyx_L1_error)
 06015:                     'PyObject float column with nulls requires byte-aligned '
 06016:                     'chunk boundaries.')
+06017:             if prebuilt.has_nulls:
      if (__pyx_v_prebuilt->has_nulls) {
/* … */
        goto __pyx_L39;
      }
+06018:                 validity.bits = prebuilt.validity + (row_offset // 8)
        __pyx_v_validity.bits = (__pyx_v_prebuilt->validity + (__pyx_v_row_offset / 8));
+06019:                 validity.bit_len = row_count
        __pyx_v_validity.bit_len = __pyx_v_row_count;
+06020:                 validity_ptr = &validity
        __pyx_v_validity_ptr = (&__pyx_v_validity);
 06021:             else:
+06022:                 validity_ptr = NULL
      /*else*/ {
        __pyx_v_validity_ptr = NULL;
      }
      __pyx_L39:;
+06023:             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:;
          }
      }
+06024:                 ok = qwp_chunk_append_numpy_column(
            __pyx_v_ok = qwp_chunk_append_numpy_column(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, qwp_numpy_f64, (((uint8_t const *)__pyx_v_prebuilt->data) + (__pyx_v_row_offset * 8)), (__pyx_v_row_count * 8), __pyx_v_row_count, __pyx_v_validity_ptr, NULL, (&__pyx_v_err));
          }
 06025:                     chunk,
 06026:                     col.name.buf,
 06027:                     col.name.len,
 06028:                     qwp_numpy_dtype.qwp_numpy_f64,
 06029:                     (<const uint8_t*>prebuilt.data) + row_offset * 8,
 06030:                     row_count * 8,
 06031:                     row_count,
 06032:                     validity_ptr,
 06033:                     NULL,
 06034:                     &err)
 06035:         else:
+06036:             raise RuntimeError('Unsupported columnar float source.')
      __pyx_t_6 = NULL;
      __pyx_t_12 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_Unsupported_columnar_float_sourc};
        __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_12, (2-__pyx_t_12) | (__pyx_t_12*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6036, __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(0, 6036, __pyx_L1_error)
      break;
    }
+06037:     elif col.setup.target == col_target_t.col_target_column_ts:
    break;
    case __pyx_e_7questdb_7_client_col_target_column_i8:
+06038:         if col.setup.source == col_source_t.col_source_dt64ns_numpy:
    switch (__pyx_v_col->setup->source) {
      case __pyx_e_7questdb_7_client_col_source_dt64ns_numpy:
/* … */
      break;
      case __pyx_e_7questdb_7_client_col_source_dt64us_numpy:
+06039:             with nogil:
      {
          PyThreadState * _save;
          _save = PyEval_SaveThread();
          __Pyx_FastGIL_Remember();
          /*try:*/ {
/* … */
          /*finally:*/ {
            /*normal exit:*/{
              __Pyx_FastGIL_Forget();
              PyEval_RestoreThread(_save);
              goto __pyx_L45;
            }
            __pyx_L45:;
          }
      }
+06040:                 ok = qwp_chunk_append_numpy_column(
            __pyx_v_ok = qwp_chunk_append_numpy_column(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, qwp_numpy_datetime64_ns, (((uint8_t const *)__pyx_v_data) + (__pyx_v_row_offset * 8)), (__pyx_v_row_count * 8), __pyx_v_row_count, __pyx_v_validity_ptr, NULL, (&__pyx_v_err));
          }
 06041:                     chunk,
 06042:                     col.name.buf,
 06043:                     col.name.len,
 06044:                     qwp_numpy_dtype.qwp_numpy_datetime64_ns,
 06045:                     (<const uint8_t*>data) + row_offset * 8,
 06046:                     row_count * 8,
 06047:                     row_count,
 06048:                     validity_ptr,
 06049:                     NULL,
 06050:                     &err)
+06051:         elif col.setup.source == col_source_t.col_source_dt64us_numpy:
      break;
      case __pyx_e_7questdb_7_client_col_source_dt64ns_tz_arrow:
+06052:             with nogil:
      {
          PyThreadState * _save;
          _save = PyEval_SaveThread();
          __Pyx_FastGIL_Remember();
          /*try:*/ {
/* … */
          /*finally:*/ {
            /*normal exit:*/{
              __Pyx_FastGIL_Forget();
              PyEval_RestoreThread(_save);
              goto __pyx_L48;
            }
            __pyx_L48:;
          }
      }
+06053:                 ok = qwp_chunk_append_numpy_column(
            __pyx_v_ok = qwp_chunk_append_numpy_column(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, qwp_numpy_datetime64_us, (((uint8_t const *)__pyx_v_data) + (__pyx_v_row_offset * 8)), (__pyx_v_row_count * 8), __pyx_v_row_count, __pyx_v_validity_ptr, NULL, (&__pyx_v_err));
          }
 06054:                     chunk,
 06055:                     col.name.buf,
 06056:                     col.name.len,
 06057:                     qwp_numpy_dtype.qwp_numpy_datetime64_us,
 06058:                     (<const uint8_t*>data) + row_offset * 8,
 06059:                     row_count * 8,
 06060:                     row_count,
 06061:                     validity_ptr,
 06062:                     NULL,
 06063:                     &err)
+06064:         elif col.setup.source in (
      break;
      case __pyx_e_7questdb_7_client_col_source_datetime_pyobj:
+06065:                 col_source_t.col_source_dt64ns_tz_arrow,
      case __pyx_e_7questdb_7_client_col_source_dt64us_tz_arrow:
 06066:                 col_source_t.col_source_dt64us_tz_arrow):
+06067:             _dataframe_columnar_call_arrow_append(
      __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_call_arrow_append(__pyx_v_chunk, __pyx_v_col, __pyx_v_row_offset, __pyx_v_row_count, NULL); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6067, __pyx_L1_error)
 06068:                 chunk, col, row_offset, row_count)
+06069:             return 0
      __pyx_r = 0;
      goto __pyx_L0;
+06070:         elif col.setup.source == col_source_t.col_source_datetime_pyobj:
      break;
      default:
+06071:             _dataframe_columnar_append_pyobj_simple(
      __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_append_pyobj_simple(__pyx_v_chunk, __pyx_v_col, __pyx_v_prebuilt, __pyx_v_row_offset, __pyx_v_row_count, 8, qwp_numpy_datetime64_us); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6071, __pyx_L1_error)
 06072:                 chunk, col, prebuilt, row_offset, row_count, 8,
 06073:                 qwp_numpy_dtype.qwp_numpy_datetime64_us)
+06074:             return 0
      __pyx_r = 0;
      goto __pyx_L0;
 06075:         else:
+06076:             raise RuntimeError('Unsupported columnar timestamp field source.')
      __pyx_t_6 = NULL;
      __pyx_t_12 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_Unsupported_columnar_timestamp_f};
        __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_12, (2-__pyx_t_12) | (__pyx_t_12*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6076, __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(0, 6076, __pyx_L1_error)
      break;
    }
+06077:     elif col.setup.target in (
    break;
    case __pyx_e_7questdb_7_client_col_target_column_uuid:
+06078:             col_target_t.col_target_column_i8,
    case __pyx_e_7questdb_7_client_col_target_column_i16:
+06079:             col_target_t.col_target_column_i16,
    case __pyx_e_7questdb_7_client_col_target_column_i32:
+06080:             col_target_t.col_target_column_i32,
    case __pyx_e_7questdb_7_client_col_target_column_f32:
 06081:             col_target_t.col_target_column_f32):
+06082:         _dataframe_columnar_call_arrow_append(
    __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_call_arrow_append(__pyx_v_chunk, __pyx_v_col, __pyx_v_row_offset, __pyx_v_row_count, NULL); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6082, __pyx_L1_error)
 06083:             chunk, col, row_offset, row_count)
+06084:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
+06085:     elif col.setup.target == col_target_t.col_target_column_uuid:
    break;
    case __pyx_e_7questdb_7_client_col_target_column_ipv4:
+06086:         if col.setup.source == col_source_t.col_source_uuid_pyobj:
    __pyx_t_1 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_uuid_pyobj);
    if (__pyx_t_1) {
/* … */
    }
+06087:             _dataframe_columnar_append_pyobj_simple(
      __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_append_pyobj_simple(__pyx_v_chunk, __pyx_v_col, __pyx_v_prebuilt, __pyx_v_row_offset, __pyx_v_row_count, 16, qwp_numpy_s16); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6087, __pyx_L1_error)
 06088:                 chunk, col, prebuilt, row_offset, row_count, 16,
 06089:                 qwp_numpy_dtype.qwp_numpy_s16)
+06090:             return 0
      __pyx_r = 0;
      goto __pyx_L0;
+06091:         _dataframe_columnar_call_arrow_append(
    __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_call_arrow_append(__pyx_v_chunk, __pyx_v_col, __pyx_v_row_offset, __pyx_v_row_count, NULL); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6091, __pyx_L1_error)
 06092:             chunk, col, row_offset, row_count)
+06093:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
+06094:     elif col.setup.target == col_target_t.col_target_column_ipv4:
    break;
    case __pyx_e_7questdb_7_client_col_target_column_binary:
+06095:         if col.setup.source == col_source_t.col_source_ipv4_pyobj:
    __pyx_t_1 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_ipv4_pyobj);
    if (__pyx_t_1) {
/* … */
    }
+06096:             _dataframe_columnar_append_pyobj_simple(
      __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_append_pyobj_simple(__pyx_v_chunk, __pyx_v_col, __pyx_v_prebuilt, __pyx_v_row_offset, __pyx_v_row_count, 4, qwp_numpy_u32_ipv4); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6096, __pyx_L1_error)
 06097:                 chunk, col, prebuilt, row_offset, row_count, 4,
 06098:                 qwp_numpy_dtype.qwp_numpy_u32_ipv4)
+06099:             return 0
      __pyx_r = 0;
      goto __pyx_L0;
+06100:         _dataframe_columnar_call_arrow_append(
    __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_call_arrow_append(__pyx_v_chunk, __pyx_v_col, __pyx_v_row_offset, __pyx_v_row_count, NULL); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6100, __pyx_L1_error)
 06101:             chunk, col, row_offset, row_count)
+06102:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
+06103:     elif col.setup.target == col_target_t.col_target_column_binary:
    break;
    case __pyx_e_7questdb_7_client_col_target_column_str:
+06104:         if col.setup.source == col_source_t.col_source_bytes_pyobj:
    __pyx_t_1 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_bytes_pyobj);
    if (__pyx_t_1) {
/* … */
    }
 06105:             # A UUID or LONG256 round-trip claim turns the same object
 06106:             # column into fixed-width rows instead of an offsets table.
+06107:             if (col.setup.has_override
      if (__pyx_v_col->setup->has_override) {
      } else {
        __pyx_t_1 = __pyx_v_col->setup->has_override;
        goto __pyx_L53_bool_binop_done;
      }
/* … */
      if (__pyx_t_1) {
/* … */
      }
 06108:                     and col.setup.override_dtype
+06109:                         == qwp_numpy_dtype.qwp_numpy_s16):
      __pyx_t_3 = (__pyx_v_col->setup->override_dtype == qwp_numpy_s16);
      __pyx_t_1 = __pyx_t_3;
      __pyx_L53_bool_binop_done:;
+06110:                 _dataframe_columnar_append_pyobj_simple(
        __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_append_pyobj_simple(__pyx_v_chunk, __pyx_v_col, __pyx_v_prebuilt, __pyx_v_row_offset, __pyx_v_row_count, 16, qwp_numpy_s16); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6110, __pyx_L1_error)
 06111:                     chunk, col, prebuilt, row_offset, row_count, 16,
 06112:                     qwp_numpy_dtype.qwp_numpy_s16)
+06113:                 return 0
        __pyx_r = 0;
        goto __pyx_L0;
+06114:             if (col.setup.has_override
      if (__pyx_v_col->setup->has_override) {
      } else {
        __pyx_t_1 = __pyx_v_col->setup->has_override;
        goto __pyx_L56_bool_binop_done;
      }
/* … */
      if (__pyx_t_1) {
/* … */
      }
 06115:                     and col.setup.override_dtype
+06116:                         == qwp_numpy_dtype.qwp_numpy_s32):
      __pyx_t_3 = (__pyx_v_col->setup->override_dtype == qwp_numpy_s32);
      __pyx_t_1 = __pyx_t_3;
      __pyx_L56_bool_binop_done:;
+06117:                 _dataframe_columnar_append_pyobj_simple(
        __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_append_pyobj_simple(__pyx_v_chunk, __pyx_v_col, __pyx_v_prebuilt, __pyx_v_row_offset, __pyx_v_row_count, 32, qwp_numpy_s32); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6117, __pyx_L1_error)
 06118:                     chunk, col, prebuilt, row_offset, row_count, 32,
 06119:                     qwp_numpy_dtype.qwp_numpy_s32)
+06120:                 return 0
        __pyx_r = 0;
        goto __pyx_L0;
+06121:             _dataframe_columnar_append_pyobj_bytes(
      __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_append_pyobj_bytes(__pyx_v_chunk, __pyx_v_col, __pyx_v_prebuilt, __pyx_v_row_offset, __pyx_v_row_count); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6121, __pyx_L1_error)
 06122:                 chunk, col, prebuilt, row_offset, row_count)
+06123:             return 0
      __pyx_r = 0;
      goto __pyx_L0;
+06124:         if col.setup.source == col_source_t.col_source_fsb_claimed_arrow:
    __pyx_t_1 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_fsb_claimed_arrow);
    if (likely(__pyx_t_1)) {
/* … */
      goto __pyx_L58;
    }
 06125:             # The Arrow value buffer is already packed 16- or 32-byte
 06126:             # rows, the layout the claimed kind's NumPy dtype reads, so
 06127:             # it goes out as it stands with the column's own validity.
 06128:             # The plan checks have held it to one zero-offset array.
+06129:             if strncmp(col.setup.arrow_schema.format,
      if (__pyx_t_1) {
/* … */
        goto __pyx_L59;
      }
+06130:                        _ARROW_FMT_FSB16, 5) == 0:
      __pyx_t_1 = (strncmp(__pyx_v_col->setup->arrow_schema.format, __pyx_v_7questdb_7_client__ARROW_FMT_FSB16, 5) == 0);
+06131:                 numpy_dtype = qwp_numpy_dtype.qwp_numpy_s16
        __pyx_v_numpy_dtype = qwp_numpy_s16;
+06132:                 element_size = 16
        __pyx_v_element_size = 16;
+06133:             elif strncmp(col.setup.arrow_schema.format,
      if (likely(__pyx_t_1)) {
/* … */
        goto __pyx_L59;
      }
+06134:                          _ARROW_FMT_FSB32, 5) == 0:
      __pyx_t_1 = (strncmp(__pyx_v_col->setup->arrow_schema.format, __pyx_v_7questdb_7_client__ARROW_FMT_FSB32, 5) == 0);
+06135:                 numpy_dtype = qwp_numpy_dtype.qwp_numpy_s32
        __pyx_v_numpy_dtype = qwp_numpy_s32;
+06136:                 element_size = 32
        __pyx_v_element_size = 32;
 06137:             else:
+06138:                 raise RuntimeError(
      /*else*/ {
        __pyx_t_6 = NULL;
        __pyx_t_12 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_Claimed_fixed_size_binary_column};
          __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_12, (2-__pyx_t_12) | (__pyx_t_12*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6138, __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(0, 6138, __pyx_L1_error)
      }
      __pyx_L59:;
 06139:                     'Claimed fixed-size binary column is neither 16 nor '
 06140:                     '32 bytes wide.')
+06141:             with nogil:
      {
          PyThreadState * _save;
          _save = PyEval_SaveThread();
          __Pyx_FastGIL_Remember();
          /*try:*/ {
/* … */
          /*finally:*/ {
            /*normal exit:*/{
              __Pyx_FastGIL_Forget();
              PyEval_RestoreThread(_save);
              goto __pyx_L62;
            }
            __pyx_L62:;
          }
      }
+06142:                 ok = qwp_chunk_append_numpy_column(
            __pyx_v_ok = qwp_chunk_append_numpy_column(__pyx_v_chunk, __pyx_v_col->name.buf, __pyx_v_col->name.len, __pyx_v_numpy_dtype, (((uint8_t const *)__pyx_v_data) + (__pyx_v_row_offset * __pyx_v_element_size)), (__pyx_v_row_count * __pyx_v_element_size), __pyx_v_row_count, __pyx_v_validity_ptr, NULL, (&__pyx_v_err));
          }
 06143:                     chunk,
 06144:                     col.name.buf,
 06145:                     col.name.len,
 06146:                     numpy_dtype,
 06147:                     (<const uint8_t*>data) + row_offset * element_size,
 06148:                     row_count * element_size,
 06149:                     row_count,
 06150:                     validity_ptr,
 06151:                     NULL,
 06152:                     &err)
 06153:         else:
+06154:             raise RuntimeError('Unsupported columnar binary field source.')
    /*else*/ {
      __pyx_t_6 = NULL;
      __pyx_t_12 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_Unsupported_columnar_binary_fiel};
        __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_12, (2-__pyx_t_12) | (__pyx_t_12*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6154, __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(0, 6154, __pyx_L1_error)
    }
    __pyx_L58:;
+06155:     elif col.setup.target == col_target_t.col_target_column_str:
    break;
    case __pyx_e_7questdb_7_client_col_target_symbol:
+06156:         if col.setup.source == col_source_t.col_source_str_pyobj:
    __pyx_t_1 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_str_pyobj);
    if (__pyx_t_1) {
/* … */
    }
+06157:             _dataframe_columnar_append_pyobj_str(
      __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_append_pyobj_str(__pyx_v_chunk, __pyx_v_col, __pyx_v_prebuilt, __pyx_v_row_offset, __pyx_v_row_count); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6157, __pyx_L1_error)
 06158:                 chunk, col, prebuilt, row_offset, row_count)
+06159:             return 0  # err already raised inside on failure
      __pyx_r = 0;
      goto __pyx_L0;
+06160:         if col.setup.source in (
    switch (__pyx_v_col->setup->source) {
      case __pyx_e_7questdb_7_client_col_source_str_i8_cat:
/* … */
      break;
      default: break;
    }
+06161:                 col_source_t.col_source_str_i8_cat,
      case __pyx_e_7questdb_7_client_col_source_str_i16_cat:
+06162:                 col_source_t.col_source_str_i16_cat,
      case __pyx_e_7questdb_7_client_col_source_str_i32_cat:
 06163:                 col_source_t.col_source_str_i32_cat):
+06164:             _dataframe_columnar_call_arrow_append(
      __pyx_t_16.__pyx_n = 1;
      __pyx_t_16.symbol_mode = qwp_symbol_mode_not_symbol;
      __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_call_arrow_append(__pyx_v_chunk, __pyx_v_col, __pyx_v_row_offset, __pyx_v_row_count, &__pyx_t_16); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6164, __pyx_L1_error)
 06165:                 chunk, col, row_offset, row_count,
 06166:                 qwp_symbol_mode_not_symbol)
+06167:             return 0
      __pyx_r = 0;
      goto __pyx_L0;
+06168:         _dataframe_columnar_call_arrow_append(
    __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_call_arrow_append(__pyx_v_chunk, __pyx_v_col, __pyx_v_row_offset, __pyx_v_row_count, NULL); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6168, __pyx_L1_error)
 06169:             chunk, col, row_offset, row_count)
+06170:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
+06171:     elif col.setup.target == col_target_t.col_target_symbol:
    break;
    case __pyx_e_7questdb_7_client_col_target_column_decimal:
+06172:         _dataframe_columnar_call_arrow_append(
    __pyx_t_16.__pyx_n = 1;
    __pyx_t_16.symbol_mode = qwp_symbol_mode_symbol;
    __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_call_arrow_append(__pyx_v_chunk, __pyx_v_col, __pyx_v_row_offset, __pyx_v_row_count, &__pyx_t_16); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6172, __pyx_L1_error)
 06173:             chunk, col, row_offset, row_count,
 06174:             qwp_symbol_mode_symbol)
+06175:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
+06176:     elif col.setup.target == col_target_t.col_target_column_decimal:
    break;
    default:
+06177:         _dataframe_columnar_call_arrow_append(
    __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_call_arrow_append(__pyx_v_chunk, __pyx_v_col, __pyx_v_row_offset, __pyx_v_row_count, NULL); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6177, __pyx_L1_error)
 06178:             chunk, col, row_offset, row_count)
+06179:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
 06180:     else:
+06181:         raise RuntimeError('Unsupported columnar field target.')
    __pyx_t_6 = NULL;
    __pyx_t_12 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_Unsupported_columnar_field_targe};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_12, (2-__pyx_t_12) | (__pyx_t_12*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6181, __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(0, 6181, __pyx_L1_error)
    break;
  }
 06182: 
+06183:     if not ok:
  __pyx_t_1 = (!__pyx_v_ok);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+06184:         raise c_err_to_py(err)
    __pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6184, __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(0, 6184, __pyx_L1_error)
 06185: 
 06186: 
+06187: cdef void_int _dataframe_columnar_append_at(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_append_at(struct qwp_chunk *__pyx_v_chunk, struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_prebuilt, size_t __pyx_v_row_offset, size_t __pyx_v_row_count) {
  struct line_sender_error *__pyx_v_err;
  int64_t const *__pyx_v_data;
  int __pyx_v_ok;
  __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_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("questdb._client._dataframe_columnar_append_at", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 06188:         qwp_chunk* chunk,
 06189:         col_t* col,
 06190:         pyobj_built_t* prebuilt,
 06191:         size_t row_offset,
 06192:         size_t row_count) except -1:
+06193:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 06194:     cdef const int64_t* data
+06195:     cdef bint ok = False
  __pyx_v_ok = 0;
 06196: 
+06197:     if col.setup.source == col_source_t.col_source_datetime_pyobj:
  __pyx_t_1 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_datetime_pyobj);
  if (__pyx_t_1) {
/* … */
  }
+06198:         if prebuilt == NULL:
    __pyx_t_1 = (__pyx_v_prebuilt == NULL);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+06199:             raise RuntimeError(
      __pyx_t_3 = NULL;
      __pyx_t_4 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_PyObject_datetime_designated_TS};
        __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __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(0, 6199, __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(0, 6199, __pyx_L1_error)
 06200:                 'PyObject datetime designated TS missing pre-built buffer.')
+06201:         if prebuilt.has_nulls:
    if (unlikely(__pyx_v_prebuilt->has_nulls)) {
/* … */
    }
+06202:             raise QuestDBError(
      __pyx_t_3 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6202, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
+06203:                 QuestDBErrorCode.BadDataFrame,
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6203, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6203, __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_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[3] = {__pyx_t_3, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_Designated_timestamp_column_cann};
        __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __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_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6202, __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(0, 6202, __pyx_L1_error)
 06204:                 'Designated timestamp column cannot contain nulls.')
+06205:         data = <const int64_t*>prebuilt.data
    __pyx_v_data = ((int64_t const *)__pyx_v_prebuilt->data);
+06206:         with nogil:
    {
        PyThreadState * _save;
        _save = PyEval_SaveThread();
        __Pyx_FastGIL_Remember();
        /*try:*/ {
/* … */
        /*finally:*/ {
          /*normal exit:*/{
            __Pyx_FastGIL_Forget();
            PyEval_RestoreThread(_save);
            goto __pyx_L8;
          }
          __pyx_L8:;
        }
    }
+06207:             ok = qwp_chunk_at_micros(
          __pyx_v_ok = qwp_chunk_at_micros(__pyx_v_chunk, (__pyx_v_data + __pyx_v_row_offset), __pyx_v_row_count, (&__pyx_v_err));
        }
 06208:                 chunk,
 06209:                 data + row_offset,
 06210:                 row_count,
 06211:                 &err)
+06212:         if not ok:
    __pyx_t_1 = (!__pyx_v_ok);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+06213:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6213, __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(0, 6213, __pyx_L1_error)
+06214:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
 06215: 
+06216:     data = <const int64_t*>(col.setup.chunks.chunks[0].buffers[1])
  __pyx_v_data = ((int64_t const *)((__pyx_v_col->setup->chunks.chunks[0]).buffers[1]));
 06217: 
+06218:     if col.setup.source in (
  switch (__pyx_v_col->setup->source) {
    case __pyx_e_7questdb_7_client_col_source_dt64ns_numpy:
/* … */
    break;
    case __pyx_e_7questdb_7_client_col_source_dt64us_numpy:
+06219:             col_source_t.col_source_dt64ns_numpy,
    case __pyx_e_7questdb_7_client_col_source_dt64ns_tz_arrow:
 06220:             col_source_t.col_source_dt64ns_tz_arrow):
+06221:         with nogil:
    {
        PyThreadState * _save;
        _save = PyEval_SaveThread();
        __Pyx_FastGIL_Remember();
        /*try:*/ {
/* … */
        /*finally:*/ {
          /*normal exit:*/{
            __Pyx_FastGIL_Forget();
            PyEval_RestoreThread(_save);
            goto __pyx_L12;
          }
          __pyx_L12:;
        }
    }
+06222:             ok = qwp_chunk_at_nanos(
          __pyx_v_ok = qwp_chunk_at_nanos(__pyx_v_chunk, (__pyx_v_data + __pyx_v_row_offset), __pyx_v_row_count, (&__pyx_v_err));
        }
 06223:                 chunk,
 06224:                 data + row_offset,
 06225:                 row_count,
 06226:                 &err)
+06227:     elif col.setup.source in (
    break;
    case __pyx_e_7questdb_7_client_col_source_dt64ms_tz_arrow:
+06228:             col_source_t.col_source_dt64us_numpy,
    case __pyx_e_7questdb_7_client_col_source_dt64us_tz_arrow:
 06229:             col_source_t.col_source_dt64us_tz_arrow):
+06230:         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:;
        }
    }
+06231:             ok = qwp_chunk_at_micros(
          __pyx_v_ok = qwp_chunk_at_micros(__pyx_v_chunk, (__pyx_v_data + __pyx_v_row_offset), __pyx_v_row_count, (&__pyx_v_err));
        }
 06232:                 chunk,
 06233:                 data + row_offset,
 06234:                 row_count,
 06235:                 &err)
+06236:     elif col.setup.source == col_source_t.col_source_dt64ms_tz_arrow:
    break;
    case __pyx_e_7questdb_7_client_col_source_dt64s_tz_arrow:
+06237:         with nogil:
    {
        PyThreadState * _save;
        _save = PyEval_SaveThread();
        __Pyx_FastGIL_Remember();
        /*try:*/ {
/* … */
        /*finally:*/ {
          /*normal exit:*/{
            __Pyx_FastGIL_Forget();
            PyEval_RestoreThread(_save);
            goto __pyx_L18;
          }
          __pyx_L18:;
        }
    }
+06238:             ok = qwp_chunk_at_millis(
          __pyx_v_ok = qwp_chunk_at_millis(__pyx_v_chunk, (__pyx_v_data + __pyx_v_row_offset), __pyx_v_row_count, (&__pyx_v_err));
        }
 06239:                 chunk,
 06240:                 data + row_offset,
 06241:                 row_count,
 06242:                 &err)
+06243:     elif col.setup.source == col_source_t.col_source_dt64s_tz_arrow:
    break;
    default:
+06244:         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:;
        }
    }
+06245:             ok = qwp_chunk_at_seconds(
          __pyx_v_ok = qwp_chunk_at_seconds(__pyx_v_chunk, (__pyx_v_data + __pyx_v_row_offset), __pyx_v_row_count, (&__pyx_v_err));
        }
 06246:                 chunk,
 06247:                 data + row_offset,
 06248:                 row_count,
 06249:                 &err)
 06250:     else:
+06251:         raise RuntimeError('Unsupported columnar designated timestamp source.')
    __pyx_t_5 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Unsupported_columnar_designated};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6251, __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(0, 6251, __pyx_L1_error)
    break;
  }
 06252: 
+06253:     if not ok:
  __pyx_t_1 = (!__pyx_v_ok);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+06254:         raise c_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6254, __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(0, 6254, __pyx_L1_error)
 06255: 
 06256: 
 06257: # What `_geohash_override_dtype` answers with besides a
 06258: # `qwp_numpy_dtype` slot.
+06259: cdef int _GEOHASH_DTYPE_NONE = -1
  __pyx_v_7questdb_7_client__GEOHASH_DTYPE_NONE = -1;
+06260: cdef int _GEOHASH_DTYPE_UNSIGNED = -2
  __pyx_v_7questdb_7_client__GEOHASH_DTYPE_UNSIGNED = -2;
 06261: 
 06262: 
+06263: cdef int _geohash_override_dtype(col_source_t source) noexcept:
static int __pyx_f_7questdb_7_client__geohash_override_dtype(enum __pyx_t_7questdb_7_client_col_source_t __pyx_v_source) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 06264:     """The GEOHASH slot a column of this source goes out in,
 06265:     ``_GEOHASH_DTYPE_UNSIGNED`` for an unsigned integer column, or
 06266:     ``_GEOHASH_DTYPE_NONE`` for anything else.
 06267: 
 06268:     A GEOHASH rides on a signed integer: `qwp_numpy_dtype` names only
 06269:     signed geohash slots. An unsigned column whose claim fits its width
 06270:     has already been given the signed type of the same width by
 06271:     `_dataframe_reinterpret_unsigned_geohash`, so an unsigned column
 06272:     here holds a claim wider than it can carry. It gets its own answer
 06273:     so that the dropped claim is reported rather than left silent.
 06274:     """
+06275:     if (source == col_source_t.col_source_u8_numpy
  switch (__pyx_v_source) {
    case __pyx_e_7questdb_7_client_col_source_u8_numpy:
    case __pyx_e_7questdb_7_client_col_source_u16_numpy:
/* … */
    break;
    default: break;
  }
+06276:             or source == col_source_t.col_source_u16_numpy
    case __pyx_e_7questdb_7_client_col_source_u32_numpy:
+06277:             or source == col_source_t.col_source_u32_numpy
    case __pyx_e_7questdb_7_client_col_source_u64_numpy:
 06278:             or source == col_source_t.col_source_u64_numpy):
+06279:         return _GEOHASH_DTYPE_UNSIGNED
    __pyx_r = __pyx_v_7questdb_7_client__GEOHASH_DTYPE_UNSIGNED;
    goto __pyx_L0;
+06280:     if source == col_source_t.col_source_i8_numpy:
  __pyx_t_1 = (__pyx_v_source == __pyx_e_7questdb_7_client_col_source_i8_numpy);
  if (__pyx_t_1) {
/* … */
  }
+06281:         return <int>qwp_numpy_dtype.qwp_numpy_geohash_i8
    __pyx_r = ((int)qwp_numpy_geohash_i8);
    goto __pyx_L0;
+06282:     if source == col_source_t.col_source_i16_numpy:
  __pyx_t_1 = (__pyx_v_source == __pyx_e_7questdb_7_client_col_source_i16_numpy);
  if (__pyx_t_1) {
/* … */
  }
+06283:         return <int>qwp_numpy_dtype.qwp_numpy_geohash_i16
    __pyx_r = ((int)qwp_numpy_geohash_i16);
    goto __pyx_L0;
+06284:     if source == col_source_t.col_source_i32_numpy:
  __pyx_t_1 = (__pyx_v_source == __pyx_e_7questdb_7_client_col_source_i32_numpy);
  if (__pyx_t_1) {
/* … */
  }
+06285:         return <int>qwp_numpy_dtype.qwp_numpy_geohash_i32
    __pyx_r = ((int)qwp_numpy_geohash_i32);
    goto __pyx_L0;
+06286:     if (source == col_source_t.col_source_i64_numpy
  switch (__pyx_v_source) {
    case __pyx_e_7questdb_7_client_col_source_i64_numpy:
    case __pyx_e_7questdb_7_client_col_source_i64_arrow:
/* … */
    break;
    default: break;
  }
+06287:             or source == col_source_t.col_source_i64_arrow
    case __pyx_e_7questdb_7_client_col_source_int_pyobj:
 06288:             or source == col_source_t.col_source_int_pyobj):
 06289:         # An object column of Python ints — what a masked pandas dtype
 06290:         # becomes — is widened to the 64-bit geohash; the claim carries
 06291:         # the precision, so the storage width no longer has to.
 06292:         #
 06293:         # `i64_arrow` is here because it is the one Arrow integer width
 06294:         # that resolves to `col_target_column_i64` and so reaches the
 06295:         # wire as a raw buffer the append call names a dtype for. The
 06296:         # narrower Arrow widths take their own targets and go to the
 06297:         # native importer as Arrow arrays, which carry no type hint;
 06298:         # `_dataframe_normalize_claimed_arrow` reshapes those instead.
+06299:         return <int>qwp_numpy_dtype.qwp_numpy_geohash_i64
    __pyx_r = ((int)qwp_numpy_geohash_i64);
    goto __pyx_L0;
+06300:     return _GEOHASH_DTYPE_NONE
  __pyx_r = __pyx_v_7questdb_7_client__GEOHASH_DTYPE_NONE;
  goto __pyx_L0;
 06301: 
 06302: 
+06303: cdef int _geohash_dtype_max_bits(int gh) noexcept:
static int __pyx_f_7questdb_7_client__geohash_dtype_max_bits(int __pyx_v_gh) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 06304:     """The widest precision a GEOHASH slot of this width can hold.
 06305: 
 06306:     Signed carriers preserve their raw two's-complement bits, so their
 06307:     sign bit is available to a byte-aligned GEOHASH. The 64-bit slot
 06308:     stops at 60 because that is the widest GEOHASH QuestDB has.
 06309: 
 06310:     `_attrs_override_fits` states the same four numbers against Arrow
 06311:     types.
 06312:     """
+06313:     if gh == <int>qwp_numpy_dtype.qwp_numpy_geohash_i8:
  __pyx_t_1 = (__pyx_v_gh == ((int)qwp_numpy_geohash_i8));
  if (__pyx_t_1) {
/* … */
  }
+06314:         return 8
    __pyx_r = 8;
    goto __pyx_L0;
+06315:     if gh == <int>qwp_numpy_dtype.qwp_numpy_geohash_i16:
  __pyx_t_1 = (__pyx_v_gh == ((int)qwp_numpy_geohash_i16));
  if (__pyx_t_1) {
/* … */
  }
+06316:         return 16
    __pyx_r = 16;
    goto __pyx_L0;
+06317:     if gh == <int>qwp_numpy_dtype.qwp_numpy_geohash_i32:
  __pyx_t_1 = (__pyx_v_gh == ((int)qwp_numpy_geohash_i32));
  if (__pyx_t_1) {
/* … */
  }
+06318:         return 32
    __pyx_r = 32;
    goto __pyx_L0;
+06319:     if gh == <int>qwp_numpy_dtype.qwp_numpy_geohash_i64:
  __pyx_t_1 = (__pyx_v_gh == ((int)qwp_numpy_geohash_i64));
  if (__pyx_t_1) {
/* … */
  }
+06320:         return 60
    __pyx_r = 60;
    goto __pyx_L0;
+06321:     return -1
  __pyx_r = -1;
  goto __pyx_L0;
 06322: 
 06323: 
+06324: cdef object _dataframe_normalize_nullable(object df):
static PyObject *__pyx_f_7questdb_7_client__dataframe_normalize_nullable(PyObject *__pyx_v_df) {
  PyObject *__pyx_v_masked_base = 0;
  PyObject *__pyx_v_convert = NULL;
  PyObject *__pyx_v_pos = NULL;
  PyObject *__pyx_v_dtype = NULL;
  PyObject *__pyx_v_out = 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_5);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("questdb._client._dataframe_normalize_nullable", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_masked_base);
  __Pyx_XDECREF(__pyx_v_convert);
  __Pyx_XDECREF(__pyx_v_pos);
  __Pyx_XDECREF(__pyx_v_dtype);
  __Pyx_XDECREF(__pyx_v_out);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+06325:     if not _is_pandas_dataframe_object(df):
  __pyx_t_1 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_df); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6325, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {
/* … */
  }
+06326:         return df
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_df);
    __pyx_r = __pyx_v_df;
    goto __pyx_L0;
+06327:     _dataframe_may_import_deps()
  __pyx_t_3 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6327, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06328:     cdef object masked_base = _pandas_masked_dtype()
  __pyx_t_3 = __pyx_f_7questdb_7_client__pandas_masked_dtype(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6328, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_masked_base = __pyx_t_3;
  __pyx_t_3 = 0;
+06329:     convert = []
  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6329, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_convert = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+06330:     for pos, dtype in enumerate(df.dtypes):
  __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
  __pyx_t_3 = __pyx_mstate_global->__pyx_int_0;
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_dtypes); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6330, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (likely(PyList_CheckExact(__pyx_t_4)) || PyTuple_CheckExact(__pyx_t_4)) {
    __pyx_t_5 = __pyx_t_4; __Pyx_INCREF(__pyx_t_5);
    __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
  } else {
    __pyx_t_6 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6330, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6330, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  for (;;) {
    if (likely(!__pyx_t_7)) {
      if (likely(PyList_CheckExact(__pyx_t_5))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_5);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6330, __pyx_L1_error)
          #endif
          if (__pyx_t_6 >= __pyx_temp) break;
        }
        __pyx_t_4 = __Pyx_PyList_GetItemRefFast(__pyx_t_5, __pyx_t_6, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_6;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_5);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6330, __pyx_L1_error)
          #endif
          if (__pyx_t_6 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_6));
        #else
        __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_5, __pyx_t_6);
        #endif
        ++__pyx_t_6;
      }
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6330, __pyx_L1_error)
    } else {
      __pyx_t_4 = __pyx_t_7(__pyx_t_5);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 6330, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_4);
    __pyx_t_4 = 0;
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_XDECREF_SET(__pyx_v_pos, __pyx_t_3);
    __pyx_t_4 = __Pyx_PyLong_AddObjC(__pyx_t_3, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6330, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3);
    __pyx_t_3 = __pyx_t_4;
    __pyx_t_4 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 06331:         # pyarrow-backed strings keep their Arrow buffers (resolved as
 06332:         # str_utf8_arrow), so an all-null column survives as a null VARCHAR
 06333:         # instead of collapsing to a skipped all-null object column.
+06334:         if isinstance(dtype, masked_base):
    __pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_v_masked_base); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 6334, __pyx_L1_error)
    if (__pyx_t_2) {
/* … */
      goto __pyx_L6;
    }
+06335:             convert.append(pos)
      __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_convert, __pyx_v_pos); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 6335, __pyx_L1_error)
+06336:         elif (isinstance(dtype, _PANDAS.StringDtype)
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PANDAS, __pyx_mstate_global->__pyx_n_u_StringDtype); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6336, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_4); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 6336, __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_L7_bool_binop_done;
    }
/* … */
    if (__pyx_t_2) {
/* … */
    }
    __pyx_L6:;
+06337:                 and getattr(dtype, 'storage', None) != 'pyarrow'):
    __pyx_t_4 = __Pyx_GetAttr3(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_storage, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6337, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_pyarrow, Py_NE)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6337, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_2 = __pyx_t_1;
    __pyx_L7_bool_binop_done:;
+06338:             convert.append(pos)
      __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_convert, __pyx_v_pos); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 6338, __pyx_L1_error)
+06339:     if not convert:
  {
    Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v_convert);
    if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 6339, __pyx_L1_error)
    __pyx_t_2 = (__pyx_temp != 0);
  }

  __pyx_t_1 = (!__pyx_t_2);
  if (__pyx_t_1) {
/* … */
  }
+06340:         return df
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_df);
    __pyx_r = __pyx_v_df;
    goto __pyx_L0;
+06341:     out = df.copy(deep=False)
  __pyx_t_5 = __pyx_v_df;
  __Pyx_INCREF(__pyx_t_5);
  __pyx_t_9 = 0;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_5, NULL};
    __pyx_t_4 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6341, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_deep, Py_False, __pyx_t_4, __pyx_callargs+1, 0) < (0)) __PYX_ERR(0, 6341, __pyx_L1_error)
    __pyx_t_3 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_copy, __pyx_callargs+__pyx_t_9, (1-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_4);
    __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(0, 6341, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_v_out = __pyx_t_3;
  __pyx_t_3 = 0;
+06342:     for pos in convert:
  __pyx_t_3 = __pyx_v_convert; __Pyx_INCREF(__pyx_t_3);
  __pyx_t_6 = 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(0, 6342, __pyx_L1_error)
      #endif
      if (__pyx_t_6 >= __pyx_temp) break;
    }
    __pyx_t_4 = __Pyx_PyList_GetItemRefFast(__pyx_t_3, __pyx_t_6, __Pyx_ReferenceSharing_OwnStrongReference);
    ++__pyx_t_6;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6342, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_XDECREF_SET(__pyx_v_pos, __pyx_t_4);
    __pyx_t_4 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06343:         _dataframe_set_column(out, df, pos, df.iloc[:, pos].astype(object))
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 6343, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6343, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_slice[0]);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[0]);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_mstate_global->__pyx_slice[0]) != (0)) __PYX_ERR(0, 6343, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_pos);
    __Pyx_GIVEREF(__pyx_v_pos);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_pos) != (0)) __PYX_ERR(0, 6343, __pyx_L1_error);
    __pyx_t_12 = __Pyx_PyObject_GetItem(__pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6343, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_5 = __pyx_t_12;
    __Pyx_INCREF(__pyx_t_5);
    __pyx_t_9 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_builtin_object};
      __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6343, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __pyx_t_13 = __pyx_f_7questdb_7_client__dataframe_set_column(__pyx_v_out, __pyx_v_df, __pyx_v_pos, __pyx_t_4); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6343, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+06344:     out.attrs = dict(df.attrs)
  __pyx_t_4 = NULL;
  __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_attrs); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6344, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_9 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_12};
    __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(&PyDict_Type), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6344, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_out, __pyx_mstate_global->__pyx_n_u_attrs, __pyx_t_3) < (0)) __PYX_ERR(0, 6344, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06345:     return out
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;
 06346: 
 06347: 
+06348: cdef void_int _dataframe_set_column(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_set_column(PyObject *__pyx_v_out, PyObject *__pyx_v_df, PyObject *__pyx_v_pos, PyObject *__pyx_v_value) {
  __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_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._dataframe_set_column", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 06349:         object out, object df, object pos, object value) except -1:
 06350:     # `out[name] = value` trips pandas' chained-assignment refcount
 06351:     # heuristic when called from Cython (the shallow copy looks like a
 06352:     # temporary), spamming FutureWarnings under pandas >= 2.2 warn-CoW
 06353:     # and erroring under `-W error`. Positional `isetitem` performs the
 06354:     # same block replacement without the heuristic; pandas < 1.5 lacks
 06355:     # it but also lacks the warning, so plain setitem stays correct.
+06356:     if hasattr(out, 'isetitem'):
  __pyx_t_1 = __Pyx_HasAttr(__pyx_v_out, __pyx_mstate_global->__pyx_n_u_isetitem); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 6356, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+06357:         out.isetitem(pos, value)
    __pyx_t_3 = __pyx_v_out;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_v_pos, __pyx_v_value};
      __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_isetitem, __pyx_callargs+__pyx_t_4, (3-__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(0, 6357, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 06358:     else:
+06359:         out[df.columns[pos]] = value
  /*else*/ {
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6359, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_v_pos); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6359, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely((PyObject_SetItem(__pyx_v_out, __pyx_t_3, __pyx_v_value) < 0))) __PYX_ERR(0, 6359, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __pyx_L3:;
 06360: 
 06361: 
+06362: cdef object _dataframe_normalize_at_timestamp(object df, object at):
static PyObject *__pyx_f_7questdb_7_client__dataframe_normalize_at_timestamp(PyObject *__pyx_v_df, PyObject *__pyx_v_at) {
  PyObject *__pyx_v_dtype = 0;
  PyObject *__pyx_v_new_dtype = 0;
  PyObject *__pyx_v_out = 0;
  PyObject *__pyx_v_at_name = 0;
  PyObject *__pyx_v_pos = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("questdb._client._dataframe_normalize_at_timestamp", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dtype);
  __Pyx_XDECREF(__pyx_v_new_dtype);
  __Pyx_XDECREF(__pyx_v_out);
  __Pyx_XDECREF(__pyx_v_at_name);
  __Pyx_XDECREF(__pyx_v_pos);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 06363:     # tz-aware (DatetimeTZ) ms/s designated-`at` columns can't reach the
 06364:     # columnar resolver's source override (the shared classifier rejects
 06365:     # non-ns/us tz units first), so widen them to us here. ArrowDtype ms/s
 06366:     # is widened to micros in Rust by the millis/seconds designated-ts FFI.
 06367:     cdef object dtype, new_dtype, out, at_name
+06368:     if not _is_pandas_dataframe_object(df):
  __pyx_t_1 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_df); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6368, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {
/* … */
  }
+06369:         return df
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_df);
    __pyx_r = __pyx_v_df;
    goto __pyx_L0;
+06370:     if isinstance(at, str):
  __pyx_t_2 = PyUnicode_Check(__pyx_v_at); 
  if (__pyx_t_2) {
/* … */
    goto __pyx_L4;
  }
+06371:         at_name = at
    __Pyx_INCREF(__pyx_v_at);
    __pyx_v_at_name = __pyx_v_at;
+06372:     elif isinstance(at, int) and not isinstance(at, bool):
  __pyx_t_1 = PyLong_Check(__pyx_v_at); 
  if (__pyx_t_1) {
  } else {
    __pyx_t_2 = __pyx_t_1;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_at, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); 
  __pyx_t_3 = (!__pyx_t_1);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L4;
  }
+06373:         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_7); __pyx_t_7 = 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_L1_error;
      __pyx_L10_except_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_L0;
      __pyx_L12_try_end:;
    }
+06374:             at_name = df.columns[at]
        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6374, __pyx_L7_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_7, __pyx_v_at); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6374, __pyx_L7_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_v_at_name = __pyx_t_8;
        __pyx_t_8 = 0;
+06375:         except Exception:
      __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
      if (__pyx_t_9) {
        __Pyx_ErrRestore(0,0,0);
+06376:             return df
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_v_df);
        __pyx_r = __pyx_v_df;
        goto __pyx_L10_except_return;
      }
      goto __pyx_L9_except_error;
+06377:         if not isinstance(at_name, str):
    __pyx_t_2 = PyUnicode_Check(__pyx_v_at_name); 
    __pyx_t_3 = (!__pyx_t_2);
    if (__pyx_t_3) {
/* … */
    }
+06378:             return df
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_df);
      __pyx_r = __pyx_v_df;
      goto __pyx_L0;
 06379:     else:
+06380:         return df
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_df);
    __pyx_r = __pyx_v_df;
    goto __pyx_L0;
  }
  __pyx_L4:;
+06381:     _dataframe_may_import_deps()
  __pyx_t_8 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6381, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+06382:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L21_try_end;
    __pyx_L16_error:;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
    __pyx_L18_except_error:;
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_5, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L20_try_return:;
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_5, __pyx_t_4);
    goto __pyx_L0;
    __pyx_L19_except_return:;
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_5, __pyx_t_4);
    goto __pyx_L0;
    __pyx_L21_try_end:;
  }
+06383:         if at_name not in df.columns:
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6383, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_at_name, __pyx_t_8, Py_NE)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 6383, __pyx_L16_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (__pyx_t_3) {
/* … */
      }
+06384:             return df
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_v_df);
        __pyx_r = __pyx_v_df;
        goto __pyx_L20_try_return;
+06385:         dtype = df[at_name].dtype
      __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_df, __pyx_v_at_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6385, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6385, __pyx_L16_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_v_dtype = __pyx_t_7;
      __pyx_t_7 = 0;
+06386:     except Exception:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_9) {
      __Pyx_ErrRestore(0,0,0);
+06387:         return df
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_df);
      __pyx_r = __pyx_v_df;
      goto __pyx_L19_except_return;
    }
    goto __pyx_L18_except_error;
+06388:     if not isinstance(dtype, _PANDAS.DatetimeTZDtype) or dtype.unit not in ('s', 'ms'):
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PANDAS, __pyx_mstate_global->__pyx_n_u_DatetimeTZDtype); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6388, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_7); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 6388, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_1 = (!__pyx_t_2);
  if (!__pyx_t_1) {
  } else {
    __pyx_t_3 = __pyx_t_1;
    goto __pyx_L26_bool_binop_done;
  }
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_unit); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6388, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_s, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 6388, __pyx_L1_error)
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L28_bool_binop_done;
  }
  __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_ms, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 6388, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_2;
  __pyx_L28_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_2 = __pyx_t_1;
  __pyx_t_3 = __pyx_t_2;
  __pyx_L26_bool_binop_done:;
  if (__pyx_t_3) {
/* … */
  }
+06389:         return df
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_df);
    __pyx_r = __pyx_v_df;
    goto __pyx_L0;
+06390:     new_dtype = _PANDAS.DatetimeTZDtype('us', dtype.tz)
  __pyx_t_8 = __pyx_v_7questdb_7_client__PANDAS;
  __Pyx_INCREF(__pyx_t_8);
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_tz); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 6390, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_11 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_mstate_global->__pyx_n_u_us, __pyx_t_10};
    __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_DatetimeTZDtype, __pyx_callargs+__pyx_t_11, (3-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6390, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
  }
  __pyx_v_new_dtype = __pyx_t_7;
  __pyx_t_7 = 0;
+06391:     pos = df.columns.get_loc(at_name)
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6391, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_10 = __pyx_t_8;
  __Pyx_INCREF(__pyx_t_10);
  __pyx_t_11 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_v_at_name};
    __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get_loc, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6391, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
  }
  __pyx_v_pos = __pyx_t_7;
  __pyx_t_7 = 0;
+06392:     if getattr(pos, '__index__', None) is None:
  __pyx_t_7 = __Pyx_GetAttr3(__pyx_v_pos, __pyx_mstate_global->__pyx_n_u_index_2, Py_None); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6392, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_3 = (__pyx_t_7 == Py_None);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__pyx_t_3) {
/* … */
  }
 06393:         # Duplicate at-column names: leave the frame for the planner
 06394:         # to reject.
+06395:         return df
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_df);
    __pyx_r = __pyx_v_df;
    goto __pyx_L0;
+06396:     out = df.copy(deep=False)
  __pyx_t_8 = __pyx_v_df;
  __Pyx_INCREF(__pyx_t_8);
  __pyx_t_11 = 0;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_8, NULL};
    __pyx_t_10 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 6396, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_deep, Py_False, __pyx_t_10, __pyx_callargs+1, 0) < (0)) __PYX_ERR(0, 6396, __pyx_L1_error)
    __pyx_t_7 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_copy, __pyx_callargs+__pyx_t_11, (1-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_10);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6396, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
  }
  __pyx_v_out = __pyx_t_7;
  __pyx_t_7 = 0;
+06397:     _dataframe_set_column(out, df, pos, df.iloc[:, pos].astype(new_dtype))
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_INCREF(__pyx_mstate_global->__pyx_slice[0]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[0]);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_mstate_global->__pyx_slice[0]) != (0)) __PYX_ERR(0, 6397, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_pos);
  __Pyx_GIVEREF(__pyx_v_pos);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_v_pos) != (0)) __PYX_ERR(0, 6397, __pyx_L1_error);
  __pyx_t_13 = __Pyx_PyObject_GetItem(__pyx_t_8, __pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 6397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_10 = __pyx_t_13;
  __Pyx_INCREF(__pyx_t_10);
  __pyx_t_11 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_v_new_dtype};
    __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6397, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
  }
  __pyx_t_14 = __pyx_f_7questdb_7_client__dataframe_set_column(__pyx_v_out, __pyx_v_df, __pyx_v_pos, __pyx_t_7); if (unlikely(__pyx_t_14 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6397, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+06398:     out.attrs = dict(df.attrs)
  __pyx_t_13 = NULL;
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_attrs); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 6398, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_11 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_t_10};
    __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)(&PyDict_Type), __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6398, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
  }
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_out, __pyx_mstate_global->__pyx_n_u_attrs, __pyx_t_7) < (0)) __PYX_ERR(0, 6398, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+06399:     return out
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;
 06400: 
 06401: 
+06402: cdef object _claimed_arrow_col_reshape_dtype(
static PyObject *__pyx_f_7questdb_7_client__claimed_arrow_col_reshape_dtype(PyObject *__pyx_v_types, PyObject *__pyx_v_raw_ty, PyObject *__pyx_v_ty, PyObject *__pyx_v_kind, PyObject *__pyx_v_series) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._claimed_arrow_col_reshape_dtype", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 06403:         object types, object raw_ty, object ty, str kind, object series):
 06404:     """The dtype an Arrow-backed claimed column has to be copied to for
 06405:     the manual planner to honour its claim, or None where the column
 06406:     carries it as it stands.
 06407: 
 06408:     An integer claim reaches the wire as the NumPy dtype named in the
 06409:     append call, so it only lands on columns the planner sends as raw
 06410:     buffers. A column handed to the native Arrow importer instead
 06411:     carries no type hint, and `qwp_chunk_append_arrow_column` takes no
 06412:     per-column type override, so those are the ones that need
 06413:     reshaping.
 06414: 
 06415:     The matching NumPy width is the copy to make where the claim has
 06416:     one: it keeps the column a raw buffer and costs a memcpy, where
 06417:     object dtype costs a boxed Python int per row -- about 100 times
 06418:     more for a column of any size. The caller downgrades a NumPy width
 06419:     to object for a column holding a null, which a NumPy integer dtype
 06420:     cannot express.
 06421: 
 06422:     UUID on a bare 16-byte column and LONG256 on a 32-byte one depend
 06423:     on the column's layout, which is why `series` is passed in. The
 06424:     classifier reads those two claims itself and sends the Arrow value
 06425:     buffer as it stands, so a column that is one zero-offset array
 06426:     needs no copy and gets None; any other layout gets object, the
 06427:     fallback `_dataframe_normalize_claimed_arrow` describes.
 06428: 
 06429:     `_attrs_override_fits` has already held each kind to the Arrow
 06430:     types listed here, so the widths not named are the ones it rejects.
 06431:     """
+06432:     if kind == 'ipv4':
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_ipv4, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6432, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
 06433:         # uint32 resolves to the i64 target and goes out as a raw
 06434:         # buffer, claim and all.
+06435:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+06436:     if kind == 'geohash':
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_geohash_2, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6436, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
 06437:         # int64 does the same. int8/16/32 take the narrow BYTE/SHORT/INT
 06438:         # targets, which reach the importer as Arrow arrays; the same
 06439:         # width in NumPy takes the i64 target and the raw-buffer route.
+06440:         if types.is_int64(ty):
    __pyx_t_3 = __pyx_v_types;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
      __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_int64, __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(0, 6440, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6440, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_1) {
/* … */
    }
+06441:             return None
      __Pyx_XDECREF(__pyx_r);
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      goto __pyx_L0;
+06442:         if types.is_int8(ty):
    __pyx_t_3 = __pyx_v_types;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
      __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_int8, __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(0, 6442, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6442, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_1) {
/* … */
    }
+06443:             return 'int8'
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_int8);
      __pyx_r = __pyx_mstate_global->__pyx_n_u_int8;
      goto __pyx_L0;
+06444:         if types.is_int16(ty):
    __pyx_t_3 = __pyx_v_types;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
      __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_int16, __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(0, 6444, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6444, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_1) {
/* … */
    }
+06445:             return 'int16'
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_int16);
      __pyx_r = __pyx_mstate_global->__pyx_n_u_int16;
      goto __pyx_L0;
+06446:         return 'int32'
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_int32);
    __pyx_r = __pyx_mstate_global->__pyx_n_u_int32;
    goto __pyx_L0;
+06447:     if kind == 'char':
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_char_2, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6447, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
 06448:         # An Arrow uint16 column goes to the importer, which has no CHAR
 06449:         # hint to read; NumPy uint16 takes the raw-buffer route.
+06450:         return 'uint16'
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_uint16);
    __pyx_r = __pyx_mstate_global->__pyx_n_u_uint16;
    goto __pyx_L0;
+06451:     if kind == 'uuid':
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_uuid, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6451, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
 06452:         # A `pa.uuid()` column states its own type to the importer and
 06453:         # already lands as UUID.
+06454:         if (isinstance(raw_ty, _PYARROW.lib.BaseExtensionType)
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_lib); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6454, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_BaseExtensionType); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6454, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_5 = PyObject_IsInstance(__pyx_v_raw_ty, __pyx_t_3); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 6454, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_5) {
    } else {
      __pyx_t_1 = __pyx_t_5;
      goto __pyx_L11_bool_binop_done;
    }
/* … */
    if (__pyx_t_1) {
/* … */
    }
+06455:                 and raw_ty.extension_name == _ARROW_EXT_UUID):
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_raw_ty, __pyx_mstate_global->__pyx_n_u_extension_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6455, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_3, __pyx_v_7questdb_7_client__ARROW_EXT_UUID, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 6455, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_1 = __pyx_t_5;
    __pyx_L11_bool_binop_done:;
+06456:             return None
      __Pyx_XDECREF(__pyx_r);
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      goto __pyx_L0;
 06457:     # UUID on a bare 16-byte column and LONG256 on a 32-byte one: the
 06458:     # planner sends the Arrow value buffer as it stands when there is
 06459:     # one buffer to send, and object dtype is the fallback for the rest.
 06460:     # `_dataframe_normalize_claimed_arrow` sets out what that costs.
+06461:     if _arrow_col_is_one_zero_offset_buffer(series):
  __pyx_t_1 = __pyx_f_7questdb_7_client__arrow_col_is_one_zero_offset_buffer(__pyx_v_series); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 6461, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+06462:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+06463:     return object
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_builtin_object);
  __pyx_r = __pyx_builtin_object;
  goto __pyx_L0;
 06464: 
 06465: 
+06466: cdef bint _arrow_col_is_one_zero_offset_buffer(object series) except -1:
static int __pyx_f_7questdb_7_client__arrow_col_is_one_zero_offset_buffer(PyObject *__pyx_v_series) {
  PyObject *__pyx_v_array = 0;
  PyObject *__pyx_v_buffers = 0;
  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_AddTraceback("questdb._client._arrow_col_is_one_zero_offset_buffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_array);
  __Pyx_XDECREF(__pyx_v_buffers);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 06467:     """Whether the planner can send this Arrow-backed column's value
 06468:     buffer as it stands.
 06469: 
 06470:     The planner's direct encoders address `buffers[1]` and the validity
 06471:     bitmap from their first byte, and take one array for the whole
 06472:     column, so `_dataframe_columnar_plan_failures` refuses any other
 06473:     layout with "v1 requires one contiguous zero-offset buffer". This
 06474:     asks the same question of the arrays the planner will export: it
 06475:     reads them through the same `pa.Array.from_pandas` call
 06476:     `_dataframe_series_to_arrow_chunks` makes, which for an `ArrowDtype`
 06477:     column hands back the arrays pandas holds without copying them.
 06478:     """
+06479:     cdef object array = _PYARROW.Array.from_pandas(series)
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_Array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6479, __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[2] = {__pyx_t_2, __pyx_v_series};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_pandas, __pyx_callargs+__pyx_t_4, (2-__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(0, 6479, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_array = __pyx_t_1;
  __pyx_t_1 = 0;
 06480:     cdef object buffers
+06481:     if isinstance(array, _PYARROW.ChunkedArray):
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_ChunkedArray); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6481, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = PyObject_IsInstance(__pyx_v_array, __pyx_t_1); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 6481, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_5) {
/* … */
  }
+06482:         if array.num_chunks != 1:
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_array, __pyx_mstate_global->__pyx_n_u_num_chunks); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6482, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = (__Pyx_PyLong_BoolNeObjC(__pyx_t_1, __pyx_mstate_global->__pyx_int_1, 1, 0)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 6482, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_5) {
/* … */
    }
+06483:             return False
      __pyx_r = 0;
      goto __pyx_L0;
+06484:         array = array.chunk(0)
    __pyx_t_3 = __pyx_v_array;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_int_0};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_chunk, __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(0, 6484, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_DECREF_SET(__pyx_v_array, __pyx_t_1);
    __pyx_t_1 = 0;
+06485:     if array.offset != 0:
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_array, __pyx_mstate_global->__pyx_n_u_offset); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6485, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = (__Pyx_PyLong_BoolNeObjC(__pyx_t_1, __pyx_mstate_global->__pyx_int_0, 0, 0)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 6485, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_5) {
/* … */
  }
+06486:         return False
    __pyx_r = 0;
    goto __pyx_L0;
+06487:     buffers = array.buffers()
  __pyx_t_3 = __pyx_v_array;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_buffers, __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_1)) __PYX_ERR(0, 6487, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_buffers = __pyx_t_1;
  __pyx_t_1 = 0;
+06488:     return (len(buffers) >= 2
  __pyx_t_6 = PyObject_Length(__pyx_v_buffers); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 6488, __pyx_L1_error)
  __pyx_t_7 = (__pyx_t_6 >= 2);
  if (__pyx_t_7) {
  } else {
    __pyx_t_5 = __pyx_t_7;
    goto __pyx_L6_bool_binop_done;
  }
+06489:             and buffers[1] is not None
  __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_buffers, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6489, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = (__pyx_t_1 != Py_None);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_7) {
  } else {
    __pyx_t_5 = __pyx_t_7;
    goto __pyx_L6_bool_binop_done;
  }
+06490:             and (array.null_count == 0 or buffers[0] is not None))
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_array, __pyx_mstate_global->__pyx_n_u_null_count); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6490, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = (__Pyx_PyLong_BoolEqObjC(__pyx_t_1, __pyx_mstate_global->__pyx_int_0, 0, 0)); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 6490, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!__pyx_t_7) {
  } else {
    __pyx_t_5 = __pyx_t_7;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_buffers, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6490, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = (__pyx_t_1 != Py_None);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_5 = __pyx_t_7;
  __pyx_L6_bool_binop_done:;
  __pyx_r = __pyx_t_5;
  goto __pyx_L0;
 06491: 
 06492: 
+06493: cdef int _geohash_slot_for_width(Py_ssize_t width) noexcept:
static int __pyx_f_7questdb_7_client__geohash_slot_for_width(Py_ssize_t __pyx_v_width) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 06494:     """The signed GEOHASH slot of this many bytes, or
 06495:     ``_GEOHASH_DTYPE_NONE``."""
+06496:     if width == 1:
  __pyx_t_1 = (__pyx_v_width == 1);
  if (__pyx_t_1) {
/* … */
  }
+06497:         return <int>qwp_numpy_dtype.qwp_numpy_geohash_i8
    __pyx_r = ((int)qwp_numpy_geohash_i8);
    goto __pyx_L0;
+06498:     if width == 2:
  __pyx_t_1 = (__pyx_v_width == 2);
  if (__pyx_t_1) {
/* … */
  }
+06499:         return <int>qwp_numpy_dtype.qwp_numpy_geohash_i16
    __pyx_r = ((int)qwp_numpy_geohash_i16);
    goto __pyx_L0;
+06500:     if width == 4:
  __pyx_t_1 = (__pyx_v_width == 4);
  if (__pyx_t_1) {
/* … */
  }
+06501:         return <int>qwp_numpy_dtype.qwp_numpy_geohash_i32
    __pyx_r = ((int)qwp_numpy_geohash_i32);
    goto __pyx_L0;
+06502:     if width == 8:
  __pyx_t_1 = (__pyx_v_width == 8);
  if (__pyx_t_1) {
/* … */
  }
+06503:         return <int>qwp_numpy_dtype.qwp_numpy_geohash_i64
    __pyx_r = ((int)qwp_numpy_geohash_i64);
    goto __pyx_L0;
+06504:     return _GEOHASH_DTYPE_NONE
  __pyx_r = __pyx_v_7questdb_7_client__GEOHASH_DTYPE_NONE;
  goto __pyx_L0;
 06505: 
 06506: 
+06507: cdef object _geohash_override_bits(object schema_overrides, object name):
static PyObject *__pyx_f_7questdb_7_client__geohash_override_bits(PyObject *__pyx_v_schema_overrides, PyObject *__pyx_v_name) {
  PyObject *__pyx_v_override = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client._geohash_override_bits", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_override);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 06508:     """The precision `schema_overrides` gives this column as a GEOHASH,
 06509:     or ``None`` when it leaves the column out or names another kind.
 06510: 
 06511:     The overrides are validated by the time this runs, so a GEOHASH
 06512:     entry is always a ``('geohash', bits)`` pair.
 06513:     """
 06514:     cdef object override
+06515:     if not schema_overrides:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_schema_overrides); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6515, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {
/* … */
  }
+06516:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+06517:     override = schema_overrides.get(name)
  __pyx_t_4 = __pyx_v_schema_overrides;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_name};
    __pyx_t_3 = __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_3)) __PYX_ERR(0, 6517, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_v_override = __pyx_t_3;
  __pyx_t_3 = 0;
+06518:     if isinstance(override, tuple) and override[0] == 'geohash':
  __pyx_t_1 = PyTuple_Check(__pyx_v_override); 
  if (__pyx_t_1) {
  } else {
    __pyx_t_2 = __pyx_t_1;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_override, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6518, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_geohash_2, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6518, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_2 = __pyx_t_1;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_2) {
/* … */
  }
+06519:         return override[1]
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_override, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6519, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
+06520:     return None
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
 06521: 
 06522: 
+06523: cdef object _pyarrow_signed_int_type(Py_ssize_t width):
static PyObject *__pyx_f_7questdb_7_client__pyarrow_signed_int_type(Py_ssize_t __pyx_v_width) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._pyarrow_signed_int_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_7questdb_7_client_39_dataframe_reinterpret_unsigned_geohash_2generator6(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
 06524:     """The signed pyarrow integer type of this many bytes."""
+06525:     if width == 1:
  __pyx_t_1 = (__pyx_v_width == 1);
  if (__pyx_t_1) {
/* … */
  }
+06526:         return _PYARROW.int8()
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __pyx_v_7questdb_7_client__PYARROW;
    __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_int8, __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(0, 6526, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+06527:     if width == 2:
  __pyx_t_1 = (__pyx_v_width == 2);
  if (__pyx_t_1) {
/* … */
  }
+06528:         return _PYARROW.int16()
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __pyx_v_7questdb_7_client__PYARROW;
    __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_int16, __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(0, 6528, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+06529:     if width == 4:
  __pyx_t_1 = (__pyx_v_width == 4);
  if (__pyx_t_1) {
/* … */
  }
+06530:         return _PYARROW.int32()
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __pyx_v_7questdb_7_client__PYARROW;
    __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_int32, __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(0, 6530, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+06531:     return _PYARROW.int64()
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __pyx_v_7questdb_7_client__PYARROW;
  __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_int64, __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(0, 6531, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 06532: 
 06533: 
+06534: cdef object _dataframe_reinterpret_unsigned_geohash(
static PyObject *__pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash(PyObject *__pyx_v_df, PyObject *__pyx_v_schema_overrides) {
  struct __pyx_obj_7questdb_7_client___pyx_scope_struct_8___pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash *__pyx_cur_scope;
  PyObject *__pyx_v_names_geohash = 0;
  PyObject *__pyx_gb_7questdb_7_client_39_dataframe_reinterpret_unsigned_geohash_2generator6 = 0;
  PyObject *__pyx_r = NULL;
  __pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_8___pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_8___pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_8___pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash, __pyx_mstate_global->__pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_7questdb_7_client___pyx_scope_struct_8___pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 6534, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_schema_overrides = __pyx_v_schema_overrides;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_schema_overrides);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_schema_overrides);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb._client._dataframe_reinterpret_unsigned_geohash", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_names_geohash);
  __Pyx_XDECREF(__pyx_gb_7questdb_7_client_39_dataframe_reinterpret_unsigned_geohash_2generator6);
  __Pyx_DECREF((PyObject *)__pyx_cur_scope);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_8___pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash {
  PyObject_HEAD
  PyObject *__pyx_v_schema_overrides;
};

 06535:         object df, object schema_overrides):
 06536:     """A copy of the frame in which each unsigned integer column bound
 06537:     for GEOHASH is the signed integer of the same width, holding the
 06538:     same bits.
 06539: 
 06540:     Both write routes carry a GEOHASH only on a signed integer, and the
 06541:     native Arrow importer refuses an unsigned column outright, so these
 06542:     columns are given the signed type before either route looks at the
 06543:     frame. A GEOHASH value is its bit pattern, so the server receives
 06544:     exactly the bits the unsigned column held. Arrow columns become
 06545:     views of each chunk, so no data is copied. A NumPy column of a
 06546:     pandas frame is viewed as signed too, but pandas copies the view
 06547:     into a new block when it is set back into the frame. An 8- or
 06548:     16-bit polars column on polars older than 1.39 refuses to
 06549:     reinterpret, so it is copied by a wrapping cast (see
 06550:     `_polars_reinterpret_unsigned_geohash`).
 06551: 
 06552:     A column is bound for GEOHASH when `schema_overrides` names it
 06553:     ``('geohash', bits)``, or when it carries a GEOHASH claim in
 06554:     ``df.attrs['questdb']`` and `schema_overrides` does not name it:
 06555:     the override outranks the claim. The claim is how a frame saved
 06556:     from version 5.0 of this client arrives, since its plain
 06557:     `to_pandas()` returned a GEOHASH column as an unsigned NumPy
 06558:     integer, and `convert_dtypes(dtype_backend='pyarrow')` turns that
 06559:     into an unsigned Arrow column. An override can name an unsigned
 06560:     column in any frame that takes overrides, so pyarrow and polars
 06561:     frames are covered too. A one-shot stream, such as a
 06562:     `RecordBatchReader`, is read only as the write goes, so its
 06563:     columns keep their own type.
 06564: 
 06565:     Only a claim the column's width can carry is taken this way. A
 06566:     column whose claim is dropped goes out as its own type, so its
 06567:     values have to stay as they are. An override is taken at any
 06568:     precision: one too wide for the column is refused by the importer,
 06569:     which names the range the column can hold. An override of another
 06570:     kind leaves the column alone, since 'ipv4' and 'char' need the
 06571:     unsigned type to apply.
 06572:     """
+06573:     cdef object names_geohash = None
  __Pyx_INCREF(Py_None);
  __pyx_v_names_geohash = Py_None;
+06574:     if _is_pandas_dataframe_object(df):
  __pyx_t_1 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_df); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6574, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+06575:         return _pandas_reinterpret_unsigned_geohash(df, schema_overrides)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_cur_scope->__pyx_v_schema_overrides;
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_3 = __pyx_f_7questdb_7_client__pandas_reinterpret_unsigned_geohash(__pyx_v_df, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6575, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
+06576:     if schema_overrides:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_schema_overrides); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6576, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+06577:         names_geohash = any(
      __Pyx_XDECREF(__pyx_r);
/* … */
    __Pyx_XDECREF(__pyx_r);
+06578:             _geohash_override_bits(schema_overrides, name) is not None
static PyObject *__pyx_pf_7questdb_7_client_39_dataframe_reinterpret_unsigned_geohash_genexpr(PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
  struct __pyx_obj_7questdb_7_client___pyx_scope_struct_9_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_9_genexpr *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_9_genexpr(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_9_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_9_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 6578, __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_8___pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash *) __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_39_dataframe_reinterpret_unsigned_geohash_2generator6, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[6]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_dataframe_reinterpret_unsigned, __pyx_mstate_global->__pyx_n_u_questdb__client); if (unlikely(!gen)) __PYX_ERR(0, 6578, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client._dataframe_reinterpret_unsigned_geohash.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_39_dataframe_reinterpret_unsigned_geohash_2generator6(__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(0, 6578, __pyx_L1_error)
/* … */
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_schema_overrides)) { __Pyx_RaiseClosureNameError("schema_overrides"); __PYX_ERR(0, 6578, __pyx_L1_error) }
    __pyx_t_4 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_schema_overrides;
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_5 = __pyx_f_7questdb_7_client__geohash_override_bits(__pyx_t_4, __pyx_cur_scope->__pyx_v_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6578, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_6 = (__pyx_t_5 != Py_None);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (__pyx_t_6) {
/* … */
      __Pyx_INCREF(Py_True);
      __pyx_r = Py_True;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
/* … */
    __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_5);
  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_39_dataframe_reinterpret_unsigned_geohash_genexpr(((PyObject*)__pyx_cur_scope), __pyx_cur_scope->__pyx_v_schema_overrides); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6578, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_Generator_GetInlinedResult(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6578, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_names_geohash, __pyx_t_2);
    __pyx_t_2 = 0;
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_9_genexpr {
  PyObject_HEAD
  struct __pyx_obj_7questdb_7_client___pyx_scope_struct_8___pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash *__pyx_outer_scope;
  PyObject *__pyx_genexpr_arg_0;
  PyObject *__pyx_v_name;
};

+06579:             for name in schema_overrides)
  if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 6579, __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(0, 6579, __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(0, 6579, __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(0, 6579, __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(0, 6579, __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(0, 6579, __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(0, 6579, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_name);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_name, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  /*else*/ {
+06580:     if not names_geohash:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_names_geohash); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6580, __pyx_L1_error)
  __pyx_t_4 = (!__pyx_t_1);
  if (__pyx_t_4) {
/* … */
  }
+06581:         return df
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_df);
    __pyx_r = __pyx_v_df;
    goto __pyx_L0;
+06582:     if _is_polars_dataframe_or_lazy(df):
  __pyx_t_4 = __pyx_f_7questdb_7_client__is_polars_dataframe_or_lazy(__pyx_v_df); if (unlikely(__pyx_t_4 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6582, __pyx_L1_error)
  if (__pyx_t_4) {
/* … */
  }
+06583:         return _polars_reinterpret_unsigned_geohash(df, schema_overrides)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_cur_scope->__pyx_v_schema_overrides;
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_3 = __pyx_f_7questdb_7_client__polars_reinterpret_unsigned_geohash(__pyx_v_df, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6583, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
 06584:     # Checked by module before pyarrow is asked, so a frame of another
 06585:     # kind never makes this import pyarrow.
+06586:     if (type(df).__module__.startswith('pyarrow')
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_df)), __pyx_mstate_global->__pyx_n_u_module); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6586, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __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_n_u_pyarrow};
    __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_startswith, __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_3)) __PYX_ERR(0, 6586, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6586, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_1) {
  } else {
    __pyx_t_4 = __pyx_t_1;
    goto __pyx_L8_bool_binop_done;
  }
/* … */
  if (__pyx_t_4) {
/* … */
  }
+06587:             and _dataframe_try_import_pyarrow()
  __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_try_import_pyarrow(); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6587, __pyx_L1_error)
  if (__pyx_t_1) {
  } else {
    __pyx_t_4 = __pyx_t_1;
    goto __pyx_L8_bool_binop_done;
  }
+06588:             and isinstance(df, (_PYARROW.Table, _PYARROW.RecordBatch))):
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_Table); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6588, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_RecordBatch); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6588, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_7 = PyObject_IsInstance(__pyx_v_df, __pyx_t_3); 
  if (!__pyx_t_7) {
  } else {
    __pyx_t_1 = __pyx_t_7;
    goto __pyx_L11_bool_binop_done;
  }
  __pyx_t_7 = PyObject_IsInstance(__pyx_v_df, __pyx_t_5); 
  __pyx_t_1 = __pyx_t_7;
  __pyx_L11_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_4 = __pyx_t_1;
  __pyx_L8_bool_binop_done:;
+06589:         return _pyarrow_reinterpret_unsigned_geohash(df, schema_overrides)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __pyx_cur_scope->__pyx_v_schema_overrides;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_5 = __pyx_f_7questdb_7_client__pyarrow_reinterpret_unsigned_geohash(__pyx_v_df, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6589, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_r = __pyx_t_5;
    __pyx_t_5 = 0;
    goto __pyx_L0;
+06590:     return df
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_df);
  __pyx_r = __pyx_v_df;
  goto __pyx_L0;
 06591: 
 06592: 
+06593: cdef object _pandas_reinterpret_unsigned_geohash(
static PyObject *__pyx_f_7questdb_7_client__pandas_reinterpret_unsigned_geohash(PyObject *__pyx_v_df, PyObject *__pyx_v_schema_overrides) {
  PyObject *__pyx_v_cols_meta = 0;
  PyObject *__pyx_v_arrow_dtype = 0;
  PyObject *__pyx_v_dtype = 0;
  PyObject *__pyx_v_meta = 0;
  PyObject *__pyx_v_bits = 0;
  PyObject *__pyx_v_ty = 0;
  PyObject *__pyx_v_col = 0;
  PyObject *__pyx_v_chunked = 0;
  PyObject *__pyx_v_out = 0;
  PyObject *__pyx_v_convert = 0;
  Py_ssize_t __pyx_v_width;
  int __pyx_v_slot;
  int __pyx_v_overridden;
  PyObject *__pyx_v_pos = NULL;
  PyObject *__pyx_v_name = NULL;
  PyObject *__pyx_9genexpr19__pyx_v_chunk = 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_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_AddTraceback("questdb._client._pandas_reinterpret_unsigned_geohash", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_cols_meta);
  __Pyx_XDECREF(__pyx_v_arrow_dtype);
  __Pyx_XDECREF(__pyx_v_dtype);
  __Pyx_XDECREF(__pyx_v_meta);
  __Pyx_XDECREF(__pyx_v_bits);
  __Pyx_XDECREF(__pyx_v_ty);
  __Pyx_XDECREF(__pyx_v_col);
  __Pyx_XDECREF(__pyx_v_chunked);
  __Pyx_XDECREF(__pyx_v_out);
  __Pyx_XDECREF(__pyx_v_convert);
  __Pyx_XDECREF(__pyx_v_pos);
  __Pyx_XDECREF(__pyx_v_name);
  __Pyx_XDECREF(__pyx_9genexpr19__pyx_v_chunk);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 06594:         object df, object schema_overrides):
 06595:     """`_dataframe_reinterpret_unsigned_geohash` for a pandas frame."""
 06596:     cdef object cols_meta, arrow_dtype, dtype, meta, bits, ty, col
 06597:     cdef object chunked, out
 06598:     cdef list convert
 06599:     cdef Py_ssize_t width
 06600:     cdef int slot
 06601:     cdef bint overridden
+06602:     cols_meta = _roundtrip_columns_meta(df)
  __pyx_t_1 = __pyx_f_7questdb_7_client__roundtrip_columns_meta(__pyx_v_df); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6602, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_cols_meta = __pyx_t_1;
  __pyx_t_1 = 0;
+06603:     if not cols_meta and not schema_overrides:
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_cols_meta); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 6603, __pyx_L1_error)
  __pyx_t_4 = (!__pyx_t_3);
  if (__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_schema_overrides); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 6603, __pyx_L1_error)
  __pyx_t_3 = (!__pyx_t_4);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {
/* … */
  }
+06604:         return df
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_df);
    __pyx_r = __pyx_v_df;
    goto __pyx_L0;
+06605:     _dataframe_may_import_deps()
  __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6605, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+06606:     arrow_dtype = getattr(_PANDAS, 'ArrowDtype', None)
  __pyx_t_1 = __pyx_v_7questdb_7_client__PANDAS;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_GetAttr3(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ArrowDtype, Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6606, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_arrow_dtype = __pyx_t_5;
  __pyx_t_5 = 0;
+06607:     convert = []
  __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6607, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_v_convert = ((PyObject*)__pyx_t_5);
  __pyx_t_5 = 0;
 06608:     # Walked by position rather than by label: `dtypes[name]` on a frame
 06609:     # with duplicate column names hands back a Series, not a dtype.
+06610:     for pos, (name, dtype) in enumerate(zip(df.columns, df.dtypes)):
  __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
  __pyx_t_5 = __pyx_mstate_global->__pyx_int_0;
  __pyx_t_6 = NULL;
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6610, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_dtypes); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6610, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_9 = 1;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_7, __pyx_t_8};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_zip, __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_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6610, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
    __pyx_t_8 = __pyx_t_1; __Pyx_INCREF(__pyx_t_8);
    __pyx_t_10 = 0;
    __pyx_t_11 = NULL;
  } else {
    __pyx_t_10 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6610, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_11 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_8); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6610, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    if (likely(!__pyx_t_11)) {
      if (likely(PyList_CheckExact(__pyx_t_8))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_8);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6610, __pyx_L1_error)
          #endif
          if (__pyx_t_10 >= __pyx_temp) break;
        }
        __pyx_t_1 = __Pyx_PyList_GetItemRefFast(__pyx_t_8, __pyx_t_10, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_10;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_8);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6610, __pyx_L1_error)
          #endif
          if (__pyx_t_10 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_10));
        #else
        __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_8, __pyx_t_10);
        #endif
        ++__pyx_t_10;
      }
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6610, __pyx_L1_error)
    } else {
      __pyx_t_1 = __pyx_t_11(__pyx_t_8);
      if (unlikely(!__pyx_t_1)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 6610, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __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 != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 6610, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0);
        __Pyx_INCREF(__pyx_t_7);
        __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1);
        __Pyx_INCREF(__pyx_t_6);
      } else {
        __pyx_t_7 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6610, __pyx_L1_error)
        __Pyx_XGOTREF(__pyx_t_7);
        __pyx_t_6 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6610, __pyx_L1_error)
        __Pyx_XGOTREF(__pyx_t_6);
      }
      #else
      __pyx_t_7 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6610, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_6 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6610, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_12 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6610, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_13 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_12);
      index = 0; __pyx_t_7 = __pyx_t_13(__pyx_t_12); if (unlikely(!__pyx_t_7)) goto __pyx_L8_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_7);
      index = 1; __pyx_t_6 = __pyx_t_13(__pyx_t_12); if (unlikely(!__pyx_t_6)) goto __pyx_L8_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_6);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_13(__pyx_t_12), 2) < (0)) __PYX_ERR(0, 6610, __pyx_L1_error)
      __pyx_t_13 = NULL;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      goto __pyx_L9_unpacking_done;
      __pyx_L8_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_13 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 6610, __pyx_L1_error)
      __pyx_L9_unpacking_done:;
    }
    __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_7);
    __pyx_t_7 = 0;
    __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_6);
    __pyx_t_6 = 0;
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_XDECREF_SET(__pyx_v_pos, __pyx_t_5);
    __pyx_t_1 = __Pyx_PyLong_AddObjC(__pyx_t_5, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6610, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5);
    __pyx_t_5 = __pyx_t_1;
    __pyx_t_1 = 0;
/* … */
    __pyx_L6_continue:;
  }
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+06611:         overridden = bool(schema_overrides) and name in schema_overrides
    __pyx_t_6 = NULL;
    __pyx_t_9 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_schema_overrides};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6611, __pyx_L1_error)
      __Pyx_GOTREF((PyObject *)__pyx_t_1);
    }
    __pyx_t_3 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_t_1)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 6611, __pyx_L1_error)
    __Pyx_DECREF((PyObject *)__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_3) {
    } else {
      __pyx_t_2 = __pyx_t_3;
      goto __pyx_L10_bool_binop_done;
    }
    __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_name, __pyx_v_schema_overrides, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 6611, __pyx_L1_error)
    __pyx_t_2 = __pyx_t_3;
    __pyx_L10_bool_binop_done:;
    __pyx_v_overridden = __pyx_t_2;
+06612:         if overridden:
    if (__pyx_v_overridden) {
/* … */
      goto __pyx_L12;
    }
+06613:             bits = _geohash_override_bits(schema_overrides, name)
      __pyx_t_1 = __pyx_f_7questdb_7_client__geohash_override_bits(__pyx_v_schema_overrides, __pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6613, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_bits, __pyx_t_1);
      __pyx_t_1 = 0;
+06614:             if bits is None:
      __pyx_t_2 = (__pyx_v_bits == Py_None);
      if (__pyx_t_2) {
/* … */
      }
+06615:                 continue
        goto __pyx_L6_continue;
 06616:         else:
+06617:             meta = cols_meta.get(name) if cols_meta else None
    /*else*/ {
      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_cols_meta); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 6617, __pyx_L1_error)
      if (__pyx_t_2) {
        __pyx_t_7 = __pyx_v_cols_meta;
        __Pyx_INCREF(__pyx_t_7);
        __pyx_t_9 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_name};
          __pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6617, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
        }
        __pyx_t_1 = __pyx_t_6;
        __pyx_t_6 = 0;
      } else {
        __Pyx_INCREF(Py_None);
        __pyx_t_1 = Py_None;
      }
      __Pyx_XDECREF_SET(__pyx_v_meta, __pyx_t_1);
      __pyx_t_1 = 0;
+06618:             if _roundtrip_kind(meta) != 'geohash':
      __pyx_t_1 = __pyx_f_7questdb_7_client__roundtrip_kind(__pyx_v_meta); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6618, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_geohash_2, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 6618, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (__pyx_t_2) {
/* … */
      }
+06619:                 continue
        goto __pyx_L6_continue;
+06620:             bits = meta.get('precision_bits') or 0
      __pyx_t_7 = __pyx_v_meta;
      __Pyx_INCREF(__pyx_t_7);
      __pyx_t_9 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_n_u_precision_bits};
        __pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6620, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
      }
      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 6620, __pyx_L1_error)
      if (!__pyx_t_2) {
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      } else {
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_1 = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        goto __pyx_L15_bool_binop_done;
      }
      __pyx_t_6 = __Pyx_PyLong_From_long(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6620, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_1 = __pyx_t_6;
      __pyx_t_6 = 0;
      __pyx_L15_bool_binop_done:;
      __Pyx_XDECREF_SET(__pyx_v_bits, __pyx_t_1);
      __pyx_t_1 = 0;
    }
    __pyx_L12:;
+06621:         if arrow_dtype is not None and isinstance(dtype, arrow_dtype):
    __pyx_t_3 = (__pyx_v_arrow_dtype != Py_None);
    if (__pyx_t_3) {
    } else {
      __pyx_t_2 = __pyx_t_3;
      goto __pyx_L18_bool_binop_done;
    }
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_dtype, __pyx_v_arrow_dtype); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 6621, __pyx_L1_error)
    __pyx_t_2 = __pyx_t_3;
    __pyx_L18_bool_binop_done:;
    if (__pyx_t_2) {
/* … */
      goto __pyx_L17;
    }
+06622:             if not _dataframe_try_import_pyarrow():
      __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_try_import_pyarrow(); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6622, __pyx_L1_error)
      __pyx_t_3 = (!__pyx_t_2);
      if (__pyx_t_3) {
/* … */
      }
+06623:                 continue
        goto __pyx_L6_continue;
+06624:             ty = dtype.pyarrow_dtype
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_pyarrow_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6624, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_ty, __pyx_t_1);
      __pyx_t_1 = 0;
+06625:             if not _PYARROW.types.is_unsigned_integer(ty):
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6625, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_6 = __pyx_t_7;
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_9 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_ty};
        __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_unsigned_integer, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (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(0, 6625, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 6625, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_2 = (!__pyx_t_3);
      if (__pyx_t_2) {
/* … */
      }
+06626:                 continue
        goto __pyx_L6_continue;
+06627:             width = ty.bit_width // 8
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_ty, __pyx_mstate_global->__pyx_n_u_bit_width); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6627, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = __Pyx_PyLong_FloorDivideObjC(__pyx_t_1, __pyx_mstate_global->__pyx_int_8, 8, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6627, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_14 = __Pyx_PyIndex_AsSsize_t(__pyx_t_7); if (unlikely((__pyx_t_14 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 6627, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_v_width = __pyx_t_14;
+06628:         elif isinstance(dtype, numpy.dtype) and dtype.kind == 'u':
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_numpy); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6628, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6628, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_3 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_1); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 6628, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_3) {
    } else {
      __pyx_t_2 = __pyx_t_3;
      goto __pyx_L22_bool_binop_done;
    }
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_kind); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6628, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_u_2, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 6628, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_2 = __pyx_t_3;
    __pyx_L22_bool_binop_done:;
    if (__pyx_t_2) {
/* … */
      goto __pyx_L17;
    }
+06629:             width = 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(0, 6629, __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(0, 6629, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_v_width = __pyx_t_14;
 06630:         else:
+06631:             continue
    /*else*/ {
      goto __pyx_L6_continue;
    }
    __pyx_L17:;
+06632:         slot = _geohash_slot_for_width(width)
    __pyx_v_slot = __pyx_f_7questdb_7_client__geohash_slot_for_width(__pyx_v_width);
+06633:         if slot == _GEOHASH_DTYPE_NONE:
    __pyx_t_2 = (__pyx_v_slot == __pyx_v_7questdb_7_client__GEOHASH_DTYPE_NONE);
    if (__pyx_t_2) {
/* … */
    }
+06634:             continue
      goto __pyx_L6_continue;
 06635:         # An override is taken at any precision, a claim only at one the
 06636:         # width can carry; see `_dataframe_reinterpret_unsigned_geohash`.
+06637:         if not overridden and (
    __pyx_t_3 = (!__pyx_v_overridden);
    if (__pyx_t_3) {
    } else {
      __pyx_t_2 = __pyx_t_3;
      goto __pyx_L26_bool_binop_done;
    }
/* … */
    if (__pyx_t_2) {
/* … */
    }
+06638:                 not _is_integral_not_bool(bits)
    __pyx_t_3 = __pyx_f_7questdb_7_client__is_integral_not_bool(__pyx_v_bits); if (unlikely(__pyx_t_3 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6638, __pyx_L1_error)
    __pyx_t_4 = (!__pyx_t_3);
    if (!__pyx_t_4) {
    } else {
      __pyx_t_2 = __pyx_t_4;
      goto __pyx_L26_bool_binop_done;
    }
+06639:                 or not 1 <= int(bits) <= _geohash_dtype_max_bits(slot)):
    __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_v_bits); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6639, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_7 = PyObject_RichCompare(__pyx_mstate_global->__pyx_int_1, __pyx_t_1, Py_LE); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6639, __pyx_L1_error)
    if (__Pyx_PyObject_IsTrue(__pyx_t_7)) {
      __Pyx_DECREF(__pyx_t_7);
      __pyx_t_6 = __Pyx_PyLong_From_int(__pyx_f_7questdb_7_client__geohash_dtype_max_bits(__pyx_v_slot)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6639, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = PyObject_RichCompare(__pyx_t_1, __pyx_t_6, Py_LE); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6639, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 6639, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_3 = (!__pyx_t_4);
    __pyx_t_2 = __pyx_t_3;
    __pyx_L26_bool_binop_done:;
+06640:             continue
      goto __pyx_L6_continue;
+06641:         convert.append((pos, width))
    __pyx_t_7 = PyLong_FromSsize_t(__pyx_v_width); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6641, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6641, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_pos);
    __Pyx_GIVEREF(__pyx_v_pos);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_pos) != (0)) __PYX_ERR(0, 6641, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_7);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_7) != (0)) __PYX_ERR(0, 6641, __pyx_L1_error);
    __pyx_t_7 = 0;
    __pyx_t_15 = __Pyx_PyList_Append(__pyx_v_convert, __pyx_t_1); if (unlikely(__pyx_t_15 == ((int)-1))) __PYX_ERR(0, 6641, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+06642:     if not convert:
  {
    Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v_convert);
    if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 6642, __pyx_L1_error)
    __pyx_t_2 = (__pyx_temp != 0);
  }

  __pyx_t_3 = (!__pyx_t_2);
  if (__pyx_t_3) {
/* … */
  }
+06643:         return df
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_df);
    __pyx_r = __pyx_v_df;
    goto __pyx_L0;
+06644:     out = df.copy(deep=False)
  __pyx_t_8 = __pyx_v_df;
  __Pyx_INCREF(__pyx_t_8);
  __pyx_t_9 = 0;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_8, NULL};
    __pyx_t_1 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6644, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_deep, Py_False, __pyx_t_1, __pyx_callargs+1, 0) < (0)) __PYX_ERR(0, 6644, __pyx_L1_error)
    __pyx_t_5 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_copy, __pyx_callargs+__pyx_t_9, (1-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_1);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6644, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
  }
  __pyx_v_out = __pyx_t_5;
  __pyx_t_5 = 0;
+06645:     for pos, width in convert:
  __pyx_t_5 = __pyx_v_convert; __Pyx_INCREF(__pyx_t_5);
  __pyx_t_10 = 0;
  for (;;) {
    {
      Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_5);
      #if !CYTHON_ASSUME_SAFE_SIZE
      if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6645, __pyx_L1_error)
      #endif
      if (__pyx_t_10 >= __pyx_temp) break;
    }
    __pyx_t_1 = __Pyx_PyList_GetItemRefFast(__pyx_t_5, __pyx_t_10, __Pyx_ReferenceSharing_OwnStrongReference);
    ++__pyx_t_10;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6645, __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 != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 6645, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_8 = PyTuple_GET_ITEM(sequence, 0);
        __Pyx_INCREF(__pyx_t_8);
        __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1);
        __Pyx_INCREF(__pyx_t_7);
      } else {
        __pyx_t_8 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6645, __pyx_L1_error)
        __Pyx_XGOTREF(__pyx_t_8);
        __pyx_t_7 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6645, __pyx_L1_error)
        __Pyx_XGOTREF(__pyx_t_7);
      }
      #else
      __pyx_t_8 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6645, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_7 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6645, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_6 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6645, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_13 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_6);
      index = 0; __pyx_t_8 = __pyx_t_13(__pyx_t_6); if (unlikely(!__pyx_t_8)) goto __pyx_L33_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_8);
      index = 1; __pyx_t_7 = __pyx_t_13(__pyx_t_6); if (unlikely(!__pyx_t_7)) goto __pyx_L33_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_7);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_13(__pyx_t_6), 2) < (0)) __PYX_ERR(0, 6645, __pyx_L1_error)
      __pyx_t_13 = NULL;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      goto __pyx_L34_unpacking_done;
      __pyx_L33_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_13 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 6645, __pyx_L1_error)
      __pyx_L34_unpacking_done:;
    }
    __pyx_t_14 = __Pyx_PyIndex_AsSsize_t(__pyx_t_7); if (unlikely((__pyx_t_14 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 6645, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_XDECREF_SET(__pyx_v_pos, __pyx_t_8);
    __pyx_t_8 = 0;
    __pyx_v_width = __pyx_t_14;
/* … */
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+06646:         col = df.iloc[:, pos]
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6646, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6646, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_slice[0]);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[0]);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_mstate_global->__pyx_slice[0]) != (0)) __PYX_ERR(0, 6646, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_pos);
    __Pyx_GIVEREF(__pyx_v_pos);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_pos) != (0)) __PYX_ERR(0, 6646, __pyx_L1_error);
    __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6646, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_XDECREF_SET(__pyx_v_col, __pyx_t_8);
    __pyx_t_8 = 0;
+06647:         if arrow_dtype is not None and isinstance(col.dtype, arrow_dtype):
    __pyx_t_2 = (__pyx_v_arrow_dtype != Py_None);
    if (__pyx_t_2) {
    } else {
      __pyx_t_3 = __pyx_t_2;
      goto __pyx_L36_bool_binop_done;
    }
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_col, __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6647, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_2 = PyObject_IsInstance(__pyx_t_8, __pyx_v_arrow_dtype); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 6647, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_3 = __pyx_t_2;
    __pyx_L36_bool_binop_done:;
    if (__pyx_t_3) {
/* … */
      goto __pyx_L35;
    }
+06648:             ty = _pyarrow_signed_int_type(width)
      __pyx_t_8 = __pyx_f_7questdb_7_client__pyarrow_signed_int_type(__pyx_v_width); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6648, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_XDECREF_SET(__pyx_v_ty, __pyx_t_8);
      __pyx_t_8 = 0;
+06649:             chunked = col.array.__arrow_array__()
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_col, __pyx_mstate_global->__pyx_n_u_array); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6649, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = __pyx_t_1;
      __Pyx_INCREF(__pyx_t_7);
      __pyx_t_9 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
        __pyx_t_8 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_arrow_array, __pyx_callargs+__pyx_t_9, (1-__pyx_t_9) | (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_8)) __PYX_ERR(0, 6649, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
      }
      __Pyx_XDECREF_SET(__pyx_v_chunked, __pyx_t_8);
      __pyx_t_8 = 0;
+06650:             _dataframe_set_column(
      __pyx_t_20 = __pyx_f_7questdb_7_client__dataframe_set_column(__pyx_v_out, __pyx_v_df, __pyx_v_pos, __pyx_t_8); if (unlikely(__pyx_t_20 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6650, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 06651:                 out, df, pos,
+06652:                 _PANDAS.arrays.ArrowExtensionArray(_PYARROW.chunked_array(
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PANDAS, __pyx_mstate_global->__pyx_n_u_arrays); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6652, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_1 = __pyx_t_7;
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_12 = __pyx_v_7questdb_7_client__PYARROW;
      __Pyx_INCREF(__pyx_t_12);
      { /* enter inner scope */
+06653:                     [chunk.view(ty) for chunk in chunked.chunks],
        __pyx_t_16 = PyList_New(0); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 6653, __pyx_L40_error)
        __Pyx_GOTREF(__pyx_t_16);
        __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_chunked, __pyx_mstate_global->__pyx_n_u_chunks); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 6653, __pyx_L40_error)
        __Pyx_GOTREF(__pyx_t_17);
        if (likely(PyList_CheckExact(__pyx_t_17)) || PyTuple_CheckExact(__pyx_t_17)) {
          __pyx_t_18 = __pyx_t_17; __Pyx_INCREF(__pyx_t_18);
          __pyx_t_14 = 0;
          __pyx_t_11 = NULL;
        } else {
          __pyx_t_14 = -1; __pyx_t_18 = PyObject_GetIter(__pyx_t_17); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 6653, __pyx_L40_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_11 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_18); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6653, __pyx_L40_error)
        }
        __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
        for (;;) {
          if (likely(!__pyx_t_11)) {
            if (likely(PyList_CheckExact(__pyx_t_18))) {
              {
                Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_18);
                #if !CYTHON_ASSUME_SAFE_SIZE
                if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6653, __pyx_L40_error)
                #endif
                if (__pyx_t_14 >= __pyx_temp) break;
              }
              __pyx_t_17 = __Pyx_PyList_GetItemRefFast(__pyx_t_18, __pyx_t_14, __Pyx_ReferenceSharing_OwnStrongReference);
              ++__pyx_t_14;
            } else {
              {
                Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_18);
                #if !CYTHON_ASSUME_SAFE_SIZE
                if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6653, __pyx_L40_error)
                #endif
                if (__pyx_t_14 >= __pyx_temp) break;
              }
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_17 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_18, __pyx_t_14));
              #else
              __pyx_t_17 = __Pyx_PySequence_ITEM(__pyx_t_18, __pyx_t_14);
              #endif
              ++__pyx_t_14;
            }
            if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 6653, __pyx_L40_error)
          } else {
            __pyx_t_17 = __pyx_t_11(__pyx_t_18);
            if (unlikely(!__pyx_t_17)) {
              PyObject* exc_type = PyErr_Occurred();
              if (exc_type) {
                if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 6653, __pyx_L40_error)
                PyErr_Clear();
              }
              break;
            }
          }
          __Pyx_GOTREF(__pyx_t_17);
          __Pyx_XDECREF_SET(__pyx_9genexpr19__pyx_v_chunk, __pyx_t_17);
          __pyx_t_17 = 0;
          __pyx_t_19 = __pyx_9genexpr19__pyx_v_chunk;
          __Pyx_INCREF(__pyx_t_19);
          __pyx_t_9 = 0;
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_19, __pyx_v_ty};
            __pyx_t_17 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_view, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
            if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 6653, __pyx_L40_error)
            __Pyx_GOTREF(__pyx_t_17);
          }
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_16, (PyObject*)__pyx_t_17))) __PYX_ERR(0, 6653, __pyx_L40_error)
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
        }
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        __Pyx_XDECREF(__pyx_9genexpr19__pyx_v_chunk); __pyx_9genexpr19__pyx_v_chunk = 0;
        goto __pyx_L44_exit_scope;
        __pyx_L40_error:;
        __Pyx_XDECREF(__pyx_9genexpr19__pyx_v_chunk); __pyx_9genexpr19__pyx_v_chunk = 0;
        goto __pyx_L1_error;
        __pyx_L44_exit_scope:;
      } /* exit inner scope */
+06654:                     type=ty)))
      __pyx_t_9 = 0;
      {
        PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_12, __pyx_t_16};
        __pyx_t_18 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 6652, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_18);
        if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_type, __pyx_v_ty, __pyx_t_18, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 6652, __pyx_L1_error)
        __pyx_t_6 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_chunked_array, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_18);
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6652, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
      }
      __pyx_t_9 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_6};
        __pyx_t_8 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_ArrowExtensionArray, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6652, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
      }
 06655:         else:
+06656:             _dataframe_set_column(
    /*else*/ {
/* … */
      __pyx_t_20 = __pyx_f_7questdb_7_client__dataframe_set_column(__pyx_v_out, __pyx_v_df, __pyx_v_pos, __pyx_t_8); if (unlikely(__pyx_t_20 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6656, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
    __pyx_L35:;
+06657:                 out, df, pos, col.to_numpy().view(f'int{width * 8}'))
      __pyx_t_1 = __pyx_v_col;
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_9 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL};
        __pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_to_numpy, __pyx_callargs+__pyx_t_9, (1-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6657, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
      }
      __pyx_t_7 = __pyx_t_6;
      __Pyx_INCREF(__pyx_t_7);
      __pyx_t_1 = __Pyx_PyUnicode_From_Py_ssize_t((__pyx_v_width * 8), 0, ' ', 'd'); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6657, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_18 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_n_u_int, __pyx_t_1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 6657, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_9 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_18};
        __pyx_t_8 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_view, __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_18); __pyx_t_18 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6657, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
      }
+06658:     out.attrs = dict(df.attrs)
  __pyx_t_8 = NULL;
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_attrs); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6658, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_9 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_6};
    __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)(&PyDict_Type), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6658, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
  }
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_out, __pyx_mstate_global->__pyx_n_u_attrs, __pyx_t_5) < (0)) __PYX_ERR(0, 6658, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+06659:     return out
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;
 06660: 
 06661: 
+06662: cdef object _pyarrow_reinterpret_unsigned_geohash(
static PyObject *__pyx_f_7questdb_7_client__pyarrow_reinterpret_unsigned_geohash(PyObject *__pyx_v_table, PyObject *__pyx_v_schema_overrides) {
  PyObject *__pyx_v_schema = 0;
  PyObject *__pyx_v_columns = 0;
  PyObject *__pyx_v_field = 0;
  PyObject *__pyx_v_ty = 0;
  PyObject *__pyx_v_col = 0;
  Py_ssize_t __pyx_v_i;
  Py_ssize_t __pyx_v_width;
  PyObject *__pyx_9genexpr20__pyx_v_chunk = 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_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("questdb._client._pyarrow_reinterpret_unsigned_geohash", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_schema);
  __Pyx_XDECREF(__pyx_v_columns);
  __Pyx_XDECREF(__pyx_v_field);
  __Pyx_XDECREF(__pyx_v_ty);
  __Pyx_XDECREF(__pyx_v_col);
  __Pyx_XDECREF(__pyx_9genexpr20__pyx_v_chunk);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 06663:         object table, object schema_overrides):
 06664:     """`_dataframe_reinterpret_unsigned_geohash` for a pyarrow `Table`
 06665:     or `RecordBatch`.
 06666: 
 06667:     Each retyped field keeps its name, nullability and metadata, and
 06668:     the schema keeps its own metadata, so everything the importer reads
 06669:     from them arrives as it was.
 06670:     """
+06671:     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(0, 6671, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_schema = __pyx_t_1;
  __pyx_t_1 = 0;
+06672:     cdef object columns = None
  __Pyx_INCREF(Py_None);
  __pyx_v_columns = Py_None;
 06673:     cdef object field, ty, col
 06674:     cdef Py_ssize_t i, width
+06675:     for i in range(len(schema)):
  __pyx_t_2 = PyObject_Length(__pyx_v_schema); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 6675, __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;
+06676:         field = 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(0, 6676, __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(0, 6676, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_XDECREF_SET(__pyx_v_field, __pyx_t_1);
    __pyx_t_1 = 0;
+06677:         if _geohash_override_bits(schema_overrides, field.name) is None:
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6677, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = __pyx_f_7questdb_7_client__geohash_override_bits(__pyx_v_schema_overrides, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6677, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_8 = (__pyx_t_6 == Py_None);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (__pyx_t_8) {
/* … */
    }
+06678:             continue
      goto __pyx_L3_continue;
+06679:         if not _PYARROW.types.is_unsigned_integer(field.type):
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6679, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_1 = __pyx_t_5;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_type); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6679, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_7 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_9};
      __pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_unsigned_integer, __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_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6679, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
    }
    __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 6679, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_10 = (!__pyx_t_8);
    if (__pyx_t_10) {
/* … */
    }
+06680:             continue
      goto __pyx_L3_continue;
+06681:         width = field.type.bit_width // 8
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_type); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6681, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_bit_width); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6681, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyLong_FloorDivideObjC(__pyx_t_5, __pyx_mstate_global->__pyx_int_8, 8, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6681, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 6681, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_v_width = __pyx_t_11;
+06682:         if _geohash_slot_for_width(width) == _GEOHASH_DTYPE_NONE:
    __pyx_t_10 = (__pyx_f_7questdb_7_client__geohash_slot_for_width(__pyx_v_width) == __pyx_v_7questdb_7_client__GEOHASH_DTYPE_NONE);
    if (__pyx_t_10) {
/* … */
    }
+06683:             continue
      goto __pyx_L3_continue;
+06684:         ty = _pyarrow_signed_int_type(width)
    __pyx_t_6 = __pyx_f_7questdb_7_client__pyarrow_signed_int_type(__pyx_v_width); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6684, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_XDECREF_SET(__pyx_v_ty, __pyx_t_6);
    __pyx_t_6 = 0;
+06685:         if columns is None:
    __pyx_t_10 = (__pyx_v_columns == Py_None);
    if (__pyx_t_10) {
/* … */
    }
+06686:             columns = list(table.columns)
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_table, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6686, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_5 = __Pyx_PySequence_ListKeepNew(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6686, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF_SET(__pyx_v_columns, __pyx_t_5);
      __pyx_t_5 = 0;
+06687:         col = columns[i]
    __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_columns, __pyx_v_i, Py_ssize_t, 1, PyLong_FromSsize_t, 0, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6687, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_XDECREF_SET(__pyx_v_col, __pyx_t_5);
    __pyx_t_5 = 0;
+06688:         if isinstance(col, _PYARROW.ChunkedArray):
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_ChunkedArray); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6688, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_10 = PyObject_IsInstance(__pyx_v_col, __pyx_t_5); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 6688, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (__pyx_t_10) {
/* … */
      goto __pyx_L9;
    }
+06689:             columns[i] = _PYARROW.chunked_array(
      __pyx_t_6 = __pyx_v_7questdb_7_client__PYARROW;
      __Pyx_INCREF(__pyx_t_6);
      { /* enter inner scope */
/* … */
      if (unlikely((__Pyx_SetItemInt(__pyx_v_columns, __pyx_v_i, __pyx_t_5, Py_ssize_t, 1, PyLong_FromSsize_t, 0, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference) < 0))) __PYX_ERR(0, 6689, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+06690:                 [chunk.view(ty) for chunk in col.chunks], type=ty)
        __pyx_t_9 = PyList_New(0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6690, __pyx_L12_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_col, __pyx_mstate_global->__pyx_n_u_chunks); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6690, __pyx_L12_error)
        __Pyx_GOTREF(__pyx_t_1);
        if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
          __pyx_t_12 = __pyx_t_1; __Pyx_INCREF(__pyx_t_12);
          __pyx_t_11 = 0;
          __pyx_t_13 = NULL;
        } else {
          __pyx_t_11 = -1; __pyx_t_12 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6690, __pyx_L12_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_13 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 6690, __pyx_L12_error)
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        for (;;) {
          if (likely(!__pyx_t_13)) {
            if (likely(PyList_CheckExact(__pyx_t_12))) {
              {
                Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_12);
                #if !CYTHON_ASSUME_SAFE_SIZE
                if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6690, __pyx_L12_error)
                #endif
                if (__pyx_t_11 >= __pyx_temp) break;
              }
              __pyx_t_1 = __Pyx_PyList_GetItemRefFast(__pyx_t_12, __pyx_t_11, __Pyx_ReferenceSharing_OwnStrongReference);
              ++__pyx_t_11;
            } else {
              {
                Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_12);
                #if !CYTHON_ASSUME_SAFE_SIZE
                if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6690, __pyx_L12_error)
                #endif
                if (__pyx_t_11 >= __pyx_temp) break;
              }
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_12, __pyx_t_11));
              #else
              __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_12, __pyx_t_11);
              #endif
              ++__pyx_t_11;
            }
            if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6690, __pyx_L12_error)
          } else {
            __pyx_t_1 = __pyx_t_13(__pyx_t_12);
            if (unlikely(!__pyx_t_1)) {
              PyObject* exc_type = PyErr_Occurred();
              if (exc_type) {
                if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 6690, __pyx_L12_error)
                PyErr_Clear();
              }
              break;
            }
          }
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_XDECREF_SET(__pyx_9genexpr20__pyx_v_chunk, __pyx_t_1);
          __pyx_t_1 = 0;
          __pyx_t_14 = __pyx_9genexpr20__pyx_v_chunk;
          __Pyx_INCREF(__pyx_t_14);
          __pyx_t_7 = 0;
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_14, __pyx_v_ty};
            __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_view, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
            if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6690, __pyx_L12_error)
            __Pyx_GOTREF(__pyx_t_1);
          }
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_9, (PyObject*)__pyx_t_1))) __PYX_ERR(0, 6690, __pyx_L12_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        }
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_XDECREF(__pyx_9genexpr20__pyx_v_chunk); __pyx_9genexpr20__pyx_v_chunk = 0;
        goto __pyx_L16_exit_scope;
        __pyx_L12_error:;
        __Pyx_XDECREF(__pyx_9genexpr20__pyx_v_chunk); __pyx_9genexpr20__pyx_v_chunk = 0;
        goto __pyx_L1_error;
        __pyx_L16_exit_scope:;
      } /* exit inner scope */
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_6, __pyx_t_9};
        __pyx_t_12 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6689, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_type, __pyx_v_ty, __pyx_t_12, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 6689, __pyx_L1_error)
        __pyx_t_5 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_chunked_array, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_12);
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6689, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
 06691:         else:
+06692:             columns[i] = col.view(ty)
    /*else*/ {
      __pyx_t_12 = __pyx_v_col;
      __Pyx_INCREF(__pyx_t_12);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_v_ty};
        __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_view, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6692, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      if (unlikely((__Pyx_SetItemInt(__pyx_v_columns, __pyx_v_i, __pyx_t_5, Py_ssize_t, 1, PyLong_FromSsize_t, 0, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference) < 0))) __PYX_ERR(0, 6692, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __pyx_L9:;
+06693:         schema = schema.set(i, field.with_type(ty))
    __pyx_t_12 = __pyx_v_schema;
    __Pyx_INCREF(__pyx_t_12);
    __pyx_t_9 = PyLong_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6693, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_1 = __pyx_v_field;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_7 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_ty};
      __pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_with_type, __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_6)) __PYX_ERR(0, 6693, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
    }
    __pyx_t_7 = 0;
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_12, __pyx_t_9, __pyx_t_6};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_set, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6693, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __Pyx_DECREF_SET(__pyx_v_schema, __pyx_t_5);
    __pyx_t_5 = 0;
    __pyx_L3_continue:;
  }
+06694:     if columns is None:
  __pyx_t_10 = (__pyx_v_columns == Py_None);
  if (__pyx_t_10) {
/* … */
  }
+06695:         return table
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_table);
    __pyx_r = __pyx_v_table;
    goto __pyx_L0;
+06696:     return type(table).from_arrays(columns, schema=schema)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_6 = ((PyObject *)Py_TYPE(__pyx_v_table));
  __Pyx_INCREF(__pyx_t_6);
  __pyx_t_7 = 0;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_6, __pyx_v_columns};
    __pyx_t_9 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 6696, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_schema, __pyx_v_schema, __pyx_t_9, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 6696, __pyx_L1_error)
    __pyx_t_5 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_from_arrays, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_9);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6696, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
  }
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;
 06697: 
 06698: 
+06699: cdef object _polars_reinterpret_unsigned_geohash(
static PyObject *__pyx_f_7questdb_7_client__polars_reinterpret_unsigned_geohash(PyObject *__pyx_v_df, PyObject *__pyx_v_schema_overrides) {
  PyObject *__pyx_v_schema = 0;
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_v_dtype = 0;
  PyObject *__pyx_v_unsigned = 0;
  PyObject *__pyx_v_narrow = 0;
  PyObject *__pyx_v_exprs = 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_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("questdb._client._polars_reinterpret_unsigned_geohash", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_schema);
  __Pyx_XDECREF(__pyx_v_name);
  __Pyx_XDECREF(__pyx_v_dtype);
  __Pyx_XDECREF(__pyx_v_unsigned);
  __Pyx_XDECREF(__pyx_v_narrow);
  __Pyx_XDECREF(__pyx_v_exprs);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 06700:         object df, object schema_overrides):
 06701:     """`_dataframe_reinterpret_unsigned_geohash` for a polars
 06702:     `DataFrame` or `LazyFrame`; a `LazyFrame` stays lazy.
 06703: 
 06704:     Each column keeps its bits. `reinterpret(signed=True)` does this
 06705:     without copying, but polars older than 1.39 accepts it only on 32-
 06706:     and 64-bit integers. On such a polars an 8- or 16-bit column takes
 06707:     a wrapping cast to the signed type of its width instead: the cast
 06708:     reduces each value modulo 2**width, which for the same width is
 06709:     the same bit pattern, and it copies the column. Nulls stay null
 06710:     either way.
 06711:     """
 06712:     cdef object schema, name, dtype
 06713:     cdef tuple unsigned = (
+06714:         _POLARS.UInt8, _POLARS.UInt16, _POLARS.UInt32, _POLARS.UInt64)
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_UInt8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6714, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_UInt16); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6714, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_UInt32); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6714, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_UInt64); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6714, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6714, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_1);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1) != (0)) __PYX_ERR(0, 6714, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_2);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2) != (0)) __PYX_ERR(0, 6714, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_3);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3) != (0)) __PYX_ERR(0, 6714, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_4);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_4) != (0)) __PYX_ERR(0, 6714, __pyx_L1_error);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_v_unsigned = ((PyObject*)__pyx_t_5);
  __pyx_t_5 = 0;
+06715:     cdef dict narrow = {_POLARS.UInt8: _POLARS.Int8,
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6715, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_UInt8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6715, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_Int8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6715, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_5, __pyx_t_4, __pyx_t_3) < (0)) __PYX_ERR(0, 6715, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06716:                         _POLARS.UInt16: _POLARS.Int16}
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_UInt16); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6716, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_Int16); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6716, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_5, __pyx_t_3, __pyx_t_4) < (0)) __PYX_ERR(0, 6715, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_narrow = ((PyObject*)__pyx_t_5);
  __pyx_t_5 = 0;
+06717:     cdef list exprs = []
  __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6717, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_v_exprs = ((PyObject*)__pyx_t_5);
  __pyx_t_5 = 0;
+06718:     schema = (df.collect_schema() if hasattr(df, 'collect_schema')
  __pyx_t_6 = __Pyx_HasAttr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_collect_schema); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 6718, __pyx_L1_error)
  if (__pyx_t_6) {
    __pyx_t_3 = __pyx_v_df;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_7 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
      __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_collect_schema, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6718, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __pyx_t_5 = __pyx_t_4;
    __pyx_t_4 = 0;
  } else {
+06719:               else df.schema)
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6719, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __pyx_t_4;
    __pyx_t_4 = 0;
  }
  __pyx_v_schema = __pyx_t_5;
  __pyx_t_5 = 0;
+06720:     for name, dtype in schema.items():
  __pyx_t_8 = 0;
  if (unlikely(__pyx_v_schema == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
    __PYX_ERR(0, 6720, __pyx_L1_error)
  }
  __pyx_t_4 = __Pyx_dict_iterator(__pyx_v_schema, 0, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6720, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __pyx_t_5 = __pyx_t_4;
  __pyx_t_4 = 0;
  while (1) {
    __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_9, &__pyx_t_8, &__pyx_t_4, &__pyx_t_3, NULL, __pyx_t_10);
    if (unlikely(__pyx_t_11 == 0)) break;
    if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 6720, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_4);
    __pyx_t_4 = 0;
    __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_3);
    __pyx_t_3 = 0;
+06721:         if (dtype in unsigned
    __pyx_t_12 = (__Pyx_PySequence_ContainsTF(__pyx_v_dtype, __pyx_v_unsigned, Py_EQ)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 6721, __pyx_L1_error)
    if (__pyx_t_12) {
    } else {
      __pyx_t_6 = __pyx_t_12;
      goto __pyx_L6_bool_binop_done;
    }
/* … */
    if (__pyx_t_6) {
/* … */
    }
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+06722:                 and _geohash_override_bits(schema_overrides, name)
    __pyx_t_3 = __pyx_f_7questdb_7_client__geohash_override_bits(__pyx_v_schema_overrides, __pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6722, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
+06723:                 is not None):
    __pyx_t_12 = (__pyx_t_3 != Py_None);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_6 = __pyx_t_12;
    __pyx_L6_bool_binop_done:;
+06724:             if dtype in narrow and not _polars_reinterprets_narrow_ints():
      __pyx_t_12 = (__Pyx_PyDict_ContainsTF(__pyx_v_dtype, __pyx_v_narrow, Py_EQ)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 6724, __pyx_L1_error)
      if (__pyx_t_12) {
      } else {
        __pyx_t_6 = __pyx_t_12;
        goto __pyx_L9_bool_binop_done;
      }
      __pyx_t_12 = __pyx_f_7questdb_7_client__polars_reinterprets_narrow_ints(); if (unlikely(__pyx_t_12 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6724, __pyx_L1_error)
      __pyx_t_13 = (!__pyx_t_12);
      __pyx_t_6 = __pyx_t_13;
      __pyx_L9_bool_binop_done:;
      if (__pyx_t_6) {
/* … */
        goto __pyx_L8;
      }
+06725:                 exprs.append(_POLARS.col(name).cast(
        __pyx_t_1 = __pyx_v_7questdb_7_client__POLARS;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_name};
          __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_col, __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(0, 6725, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_4 = __pyx_t_2;
        __Pyx_INCREF(__pyx_t_4);
/* … */
        __pyx_t_15 = __Pyx_PyList_Append(__pyx_v_exprs, __pyx_t_3); if (unlikely(__pyx_t_15 == ((int)-1))) __PYX_ERR(0, 6725, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06726:                     narrow[dtype], wrap_numerical=True))
        __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_narrow, __pyx_v_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6726, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_4, __pyx_t_1};
          __pyx_t_14 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 6725, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_14);
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_wrap_numerical, Py_True, __pyx_t_14, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 6725, __pyx_L1_error)
          __pyx_t_3 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_cast, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_14);
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6725, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
 06727:             else:
+06728:                 exprs.append(_POLARS.col(name).reinterpret(signed=True))
      /*else*/ {
        __pyx_t_1 = __pyx_v_7questdb_7_client__POLARS;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_name};
          __pyx_t_14 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_col, __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_14)) __PYX_ERR(0, 6728, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_14);
        }
        __pyx_t_2 = __pyx_t_14;
        __Pyx_INCREF(__pyx_t_2);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_2, NULL};
          __pyx_t_1 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6728, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_signed, Py_True, __pyx_t_1, __pyx_callargs+1, 0) < (0)) __PYX_ERR(0, 6728, __pyx_L1_error)
          __pyx_t_3 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_reinterpret, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_1);
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6728, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        __pyx_t_15 = __Pyx_PyList_Append(__pyx_v_exprs, __pyx_t_3); if (unlikely(__pyx_t_15 == ((int)-1))) __PYX_ERR(0, 6728, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      }
      __pyx_L8:;
+06729:     if not exprs:
  {
    Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v_exprs);
    if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 6729, __pyx_L1_error)
    __pyx_t_6 = (__pyx_temp != 0);
  }

  __pyx_t_13 = (!__pyx_t_6);
  if (__pyx_t_13) {
/* … */
  }
+06730:         return df
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_df);
    __pyx_r = __pyx_v_df;
    goto __pyx_L0;
+06731:     return df.with_columns(exprs)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __pyx_v_df;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_7 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_exprs};
    __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_with_columns, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6731, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
  }
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;
 06732: 
 06733: 
+06734: cdef object _dataframe_normalize_claimed_arrow(object df):
static PyObject *__pyx_f_7questdb_7_client__dataframe_normalize_claimed_arrow(PyObject *__pyx_v_df) {
  PyObject *__pyx_v_cols_meta = 0;
  PyObject *__pyx_v_arrow_dtype = 0;
  PyObject *__pyx_v_types = 0;
  PyObject *__pyx_v_dtype = 0;
  PyObject *__pyx_v_raw_ty = 0;
  PyObject *__pyx_v_ty = 0;
  PyObject *__pyx_v_meta = 0;
  PyObject *__pyx_v_out = 0;
  PyObject *__pyx_v_target_dtype = 0;
  PyObject *__pyx_v_kind = 0;
  PyObject *__pyx_v_convert = 0;
  PyObject *__pyx_v_pos = NULL;
  PyObject *__pyx_v_name = 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_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_AddTraceback("questdb._client._dataframe_normalize_claimed_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_cols_meta);
  __Pyx_XDECREF(__pyx_v_arrow_dtype);
  __Pyx_XDECREF(__pyx_v_types);
  __Pyx_XDECREF(__pyx_v_dtype);
  __Pyx_XDECREF(__pyx_v_raw_ty);
  __Pyx_XDECREF(__pyx_v_ty);
  __Pyx_XDECREF(__pyx_v_meta);
  __Pyx_XDECREF(__pyx_v_out);
  __Pyx_XDECREF(__pyx_v_target_dtype);
  __Pyx_XDECREF(__pyx_v_kind);
  __Pyx_XDECREF(__pyx_v_convert);
  __Pyx_XDECREF(__pyx_v_pos);
  __Pyx_XDECREF(__pyx_v_name);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 06735:     """NumPy-dtype or object-dtype copies of the Arrow-backed columns
 06736:     whose round-trip claim the manual planner cannot honour in the
 06737:     shape they arrive in.
 06738: 
 06739:     A frame mixing Arrow-backed and NumPy columns routes whole to this
 06740:     planner, where an integer claim rides on the NumPy dtype named in
 06741:     the append call. Columns handed to the native Arrow importer have
 06742:     nowhere to put it, so their claim would be dropped and the column
 06743:     would land as its storage type — CHAR and GEOHASH as plain
 06744:     integers — auto-creating the destination table with the wrong
 06745:     column types. A UUID or LONG256 claim on a bare fixed-size binary
 06746:     column is read by the classifier instead, whose route sends the
 06747:     column's own buffer, and the planner refuses that route for a column
 06748:     in any layout but one zero-offset array.
 06749: 
 06750:     An integer claim copies to the NumPy width that carries it, which
 06751:     stays a raw buffer the whole way to the wire. An integer column
 06752:     holding a null copies to object dtype instead: that is the shape
 06753:     `_dataframe_apply_roundtrip_overrides` covers for every claimed
 06754:     kind, and what `dtype_backend='numpy_nullable'` hands these columns
 06755:     back as, so both backends write the same bytes again.
 06756: 
 06757:     UUID on a bare 16-byte column and LONG256 on a 32-byte one need no
 06758:     copy. The Arrow value buffer of such a column is already a packed
 06759:     run of 16- or 32-byte values, the layout `qwp_numpy_s16` and
 06760:     `qwp_numpy_s32` read, and its validity bitmap is the one the append
 06761:     call takes, nulls included. The classifier makes such a column
 06762:     `col_source_fsb_claimed_arrow`, and the append sends the buffer as
 06763:     it stands.
 06764: 
 06765:     TRADE-OFF, kept on purpose: that route needs the column to be one
 06766:     Arrow array starting at offset zero
 06767:     (`_arrow_col_is_one_zero_offset_buffer`). A column in several
 06768:     chunks -- a query result read in more than one batch, a
 06769:     `pd.concat` -- or one sliced away from its start (`df.iloc[n:]`
 06770:     with n > 0) copies to object dtype. That copy boxes one
 06771:     `bytes` per cell, roughly 4-5x the per-cell cost and about 73 MB
 06772:     of Python objects per million 32-byte cells, but it writes the
 06773:     column where the alternative is a refusal. This planner refuses an
 06774:     Arrow-backed column of any other type in several chunks, and one
 06775:     sliced away from its start too unless it goes to the native Arrow
 06776:     importer (variable-length binary, lists, millisecond timestamps):
 06777:     integer, float, boolean and string columns get "v1 requires one
 06778:     contiguous zero-offset buffer". So the fallback runs only on frames
 06779:     whose other Arrow-backed columns are all in one array, or are
 06780:     sliced and of those importer-bound types. Gathering the chunks into
 06781:     one fresh Arrow buffer would make the copy a memcpy, but it would be
 06782:     a third route for two kinds on layouts most kinds refuse, so the
 06783:     fallback stays on the object route the `numpy_nullable` backend
 06784:     already takes for the same columns.
 06785: 
 06786:     Only a frame that already fell back from the zero-copy Arrow path
 06787:     reaches here, and within it only the claimed columns that have no
 06788:     buffer-shaped route are copied, so the shapes that can carry their
 06789:     claim natively stay zero-copy.
 06790:     """
 06791:     cdef object cols_meta, arrow_dtype, types, dtype, raw_ty, ty, meta, out
 06792:     cdef object target_dtype
 06793:     cdef str kind
 06794:     cdef list convert
+06795:     if not _is_pandas_dataframe_object(df):
  __pyx_t_1 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_df); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6795, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {
/* … */
  }
+06796:         return df
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_df);
    __pyx_r = __pyx_v_df;
    goto __pyx_L0;
+06797:     cols_meta = _roundtrip_columns_meta(df)
  __pyx_t_3 = __pyx_f_7questdb_7_client__roundtrip_columns_meta(__pyx_v_df); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6797, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_cols_meta = __pyx_t_3;
  __pyx_t_3 = 0;
+06798:     if not cols_meta:
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_cols_meta); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 6798, __pyx_L1_error)
  __pyx_t_1 = (!__pyx_t_2);
  if (__pyx_t_1) {
/* … */
  }
+06799:         return df
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_df);
    __pyx_r = __pyx_v_df;
    goto __pyx_L0;
+06800:     _dataframe_may_import_deps()
  __pyx_t_3 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6800, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06801:     arrow_dtype = getattr(_PANDAS, 'ArrowDtype', None)
  __pyx_t_3 = __pyx_v_7questdb_7_client__PANDAS;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_GetAttr3(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_ArrowDtype, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6801, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_arrow_dtype = __pyx_t_4;
  __pyx_t_4 = 0;
+06802:     if arrow_dtype is None:
  __pyx_t_1 = (__pyx_v_arrow_dtype == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+06803:         return df
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_df);
    __pyx_r = __pyx_v_df;
    goto __pyx_L0;
+06804:     if not _dataframe_try_import_pyarrow():
  __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_try_import_pyarrow(); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6804, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {
/* … */
  }
+06805:         return df
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_df);
    __pyx_r = __pyx_v_df;
    goto __pyx_L0;
+06806:     types = _PYARROW.types
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6806, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_types = __pyx_t_4;
  __pyx_t_4 = 0;
+06807:     convert = []
  __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6807, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_convert = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
 06808:     # Walked by position rather than by label: `dtypes[name]` on a frame
 06809:     # with duplicate column names hands back a Series, not a dtype.
+06810:     for pos, (name, dtype) in enumerate(zip(df.columns, df.dtypes)):
  __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
  __pyx_t_4 = __pyx_mstate_global->__pyx_int_0;
  __pyx_t_5 = NULL;
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6810, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_dtypes); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6810, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = 1;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_6, __pyx_t_7};
    __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_zip, __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_3)) __PYX_ERR(0, 6810, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) {
    __pyx_t_7 = __pyx_t_3; __Pyx_INCREF(__pyx_t_7);
    __pyx_t_9 = 0;
    __pyx_t_10 = NULL;
  } else {
    __pyx_t_9 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6810, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_10 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_7); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 6810, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  for (;;) {
    if (likely(!__pyx_t_10)) {
      if (likely(PyList_CheckExact(__pyx_t_7))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_7);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6810, __pyx_L1_error)
          #endif
          if (__pyx_t_9 >= __pyx_temp) break;
        }
        __pyx_t_3 = __Pyx_PyList_GetItemRefFast(__pyx_t_7, __pyx_t_9, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_9;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_7);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6810, __pyx_L1_error)
          #endif
          if (__pyx_t_9 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_9));
        #else
        __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_7, __pyx_t_9);
        #endif
        ++__pyx_t_9;
      }
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6810, __pyx_L1_error)
    } else {
      __pyx_t_3 = __pyx_t_10(__pyx_t_7);
      if (unlikely(!__pyx_t_3)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 6810, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_3);
    if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
      PyObject* sequence = __pyx_t_3;
      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(0, 6810, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1);
        __Pyx_INCREF(__pyx_t_5);
      } else {
        __pyx_t_6 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6810, __pyx_L1_error)
        __Pyx_XGOTREF(__pyx_t_6);
        __pyx_t_5 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6810, __pyx_L1_error)
        __Pyx_XGOTREF(__pyx_t_5);
      }
      #else
      __pyx_t_6 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6810, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_5 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6810, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      #endif
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_11 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6810, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_12 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_11);
      index = 0; __pyx_t_6 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_6)) goto __pyx_L9_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_6);
      index = 1; __pyx_t_5 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_5)) goto __pyx_L9_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_5);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < (0)) __PYX_ERR(0, 6810, __pyx_L1_error)
      __pyx_t_12 = NULL;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      goto __pyx_L10_unpacking_done;
      __pyx_L9_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_12 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 6810, __pyx_L1_error)
      __pyx_L10_unpacking_done:;
    }
    __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_6);
    __pyx_t_6 = 0;
    __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_5);
    __pyx_t_5 = 0;
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_XDECREF_SET(__pyx_v_pos, __pyx_t_4);
    __pyx_t_3 = __Pyx_PyLong_AddObjC(__pyx_t_4, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6810, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4);
    __pyx_t_4 = __pyx_t_3;
    __pyx_t_3 = 0;
/* … */
    __pyx_L7_continue:;
  }
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+06811:         if not isinstance(dtype, arrow_dtype):
    __pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_v_arrow_dtype); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 6811, __pyx_L1_error)
    __pyx_t_1 = (!__pyx_t_2);
    if (__pyx_t_1) {
/* … */
    }
+06812:             continue
      goto __pyx_L7_continue;
+06813:         meta = cols_meta.get(name)
    __pyx_t_5 = __pyx_v_cols_meta;
    __Pyx_INCREF(__pyx_t_5);
    __pyx_t_8 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_name};
      __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6813, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_XDECREF_SET(__pyx_v_meta, __pyx_t_3);
    __pyx_t_3 = 0;
+06814:         kind = _roundtrip_kind(meta)
    __pyx_t_3 = __pyx_f_7questdb_7_client__roundtrip_kind(__pyx_v_meta); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6814, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XDECREF_SET(__pyx_v_kind, ((PyObject*)__pyx_t_3));
    __pyx_t_3 = 0;
+06815:         if kind is None or kind not in _ATTRS_OVERRIDE_KINDS:
    __pyx_t_2 = (__pyx_v_kind == ((PyObject*)Py_None));
    if (!__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L13_bool_binop_done;
    }
    if (unlikely(__pyx_v_7questdb_7_client__ATTRS_OVERRIDE_KINDS == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 6815, __pyx_L1_error)
    }
    __pyx_t_2 = (__Pyx_PyDict_ContainsTF(__pyx_v_kind, __pyx_v_7questdb_7_client__ATTRS_OVERRIDE_KINDS, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 6815, __pyx_L1_error)
    __pyx_t_1 = __pyx_t_2;
    __pyx_L13_bool_binop_done:;
    if (__pyx_t_1) {
/* … */
    }
+06816:             continue
      goto __pyx_L7_continue;
+06817:         raw_ty = dtype.pyarrow_dtype
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_pyarrow_dtype); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6817, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XDECREF_SET(__pyx_v_raw_ty, __pyx_t_3);
    __pyx_t_3 = 0;
+06818:         ty = raw_ty
    __Pyx_INCREF(__pyx_v_raw_ty);
    __Pyx_XDECREF_SET(__pyx_v_ty, __pyx_v_raw_ty);
+06819:         if isinstance(ty, _PYARROW.lib.BaseExtensionType):
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_lib); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6819, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_BaseExtensionType); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6819, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_1 = PyObject_IsInstance(__pyx_v_ty, __pyx_t_5); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 6819, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (__pyx_t_1) {
/* … */
    }
+06820:             ty = ty.storage_type
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_ty, __pyx_mstate_global->__pyx_n_u_storage_type); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6820, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF_SET(__pyx_v_ty, __pyx_t_5);
      __pyx_t_5 = 0;
 06821:         # A claim that no longer fits the column is dropped rather than
 06822:         # reshaped: refusing value by value later would answer a retyped
 06823:         # column with an error where the contract promises the write
 06824:         # goes ahead. It says which claim it dropped on the way past,
 06825:         # because a type that can never carry the kind is a mistake
 06826:         # rather than drift, and the two look the same from here.
+06827:         if not _attrs_override_fits(
    __pyx_t_1 = __pyx_f_7questdb_7_client__attrs_override_fits(__pyx_v_types, __pyx_v_ty, __pyx_v_kind, __pyx_t_5); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 6827, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_2 = (!__pyx_t_1);
    if (__pyx_t_2) {
/* … */
    }
+06828:                 types, ty, kind, meta.get('precision_bits') or 0):
    __pyx_t_6 = __pyx_v_meta;
    __Pyx_INCREF(__pyx_t_6);
    __pyx_t_8 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_n_u_precision_bits};
      __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __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_3)) __PYX_ERR(0, 6828, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6828, __pyx_L1_error)
    if (!__pyx_t_1) {
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else {
      __Pyx_INCREF(__pyx_t_3);
      __pyx_t_5 = __pyx_t_3;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      goto __pyx_L17_bool_binop_done;
    }
    __pyx_t_3 = __Pyx_PyLong_From_long(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6828, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = __pyx_t_3;
    __pyx_t_3 = 0;
    __pyx_L17_bool_binop_done:;
+06829:             _log_roundtrip_claim_dropped(name, kind, dtype)
      __pyx_t_5 = __pyx_f_7questdb_7_client__log_roundtrip_claim_dropped(__pyx_v_name, __pyx_v_kind, __pyx_v_dtype); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6829, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+06830:             continue
      goto __pyx_L7_continue;
+06831:         target_dtype = _claimed_arrow_col_reshape_dtype(
    __pyx_t_3 = __pyx_f_7questdb_7_client__claimed_arrow_col_reshape_dtype(__pyx_v_types, __pyx_v_raw_ty, __pyx_v_ty, __pyx_v_kind, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6831, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF_SET(__pyx_v_target_dtype, __pyx_t_3);
    __pyx_t_3 = 0;
+06832:             types, raw_ty, ty, kind, df.iloc[:, pos])
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6832, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6832, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_slice[0]);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[0]);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_mstate_global->__pyx_slice[0]) != (0)) __PYX_ERR(0, 6832, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_pos);
    __Pyx_GIVEREF(__pyx_v_pos);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_pos) != (0)) __PYX_ERR(0, 6832, __pyx_L1_error);
    __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6832, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06833:         if target_dtype is None:
    __pyx_t_2 = (__pyx_v_target_dtype == Py_None);
    if (__pyx_t_2) {
/* … */
    }
+06834:             continue
      goto __pyx_L7_continue;
+06835:         if target_dtype is not object and df.iloc[:, pos].isna().any():
    __pyx_t_1 = (__pyx_v_target_dtype != __pyx_builtin_object);
    if (__pyx_t_1) {
    } else {
      __pyx_t_2 = __pyx_t_1;
      goto __pyx_L21_bool_binop_done;
    }
    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 6835, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_14 = PyTuple_New(2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 6835, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_slice[0]);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[0]);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_mstate_global->__pyx_slice[0]) != (0)) __PYX_ERR(0, 6835, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_pos);
    __Pyx_GIVEREF(__pyx_v_pos);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_v_pos) != (0)) __PYX_ERR(0, 6835, __pyx_L1_error);
    __pyx_t_15 = __Pyx_PyObject_GetItem(__pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 6835, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __pyx_t_11 = __pyx_t_15;
    __Pyx_INCREF(__pyx_t_11);
    __pyx_t_8 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_11, NULL};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_isna, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6835, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __pyx_t_6 = __pyx_t_5;
    __Pyx_INCREF(__pyx_t_6);
    __pyx_t_8 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL};
      __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_any, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (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_3)) __PYX_ERR(0, 6835, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6835, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_2 = __pyx_t_1;
    __pyx_L21_bool_binop_done:;
    if (__pyx_t_2) {
/* … */
    }
 06836:             # A NumPy integer dtype has no null to copy a null into.
+06837:             target_dtype = object
      __Pyx_INCREF(__pyx_builtin_object);
      __Pyx_DECREF_SET(__pyx_v_target_dtype, __pyx_builtin_object);
+06838:         convert.append((pos, target_dtype))
    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6838, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_pos);
    __Pyx_GIVEREF(__pyx_v_pos);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_pos) != (0)) __PYX_ERR(0, 6838, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_target_dtype);
    __Pyx_GIVEREF(__pyx_v_target_dtype);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_target_dtype) != (0)) __PYX_ERR(0, 6838, __pyx_L1_error);
    __pyx_t_16 = __Pyx_PyList_Append(__pyx_v_convert, __pyx_t_3); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 6838, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06839:     if not convert:
  {
    Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v_convert);
    if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 6839, __pyx_L1_error)
    __pyx_t_2 = (__pyx_temp != 0);
  }

  __pyx_t_1 = (!__pyx_t_2);
  if (__pyx_t_1) {
/* … */
  }
+06840:         return df
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_df);
    __pyx_r = __pyx_v_df;
    goto __pyx_L0;
+06841:     out = df.copy(deep=False)
  __pyx_t_7 = __pyx_v_df;
  __Pyx_INCREF(__pyx_t_7);
  __pyx_t_8 = 0;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_7, NULL};
    __pyx_t_3 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6841, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_deep, Py_False, __pyx_t_3, __pyx_callargs+1, 0) < (0)) __PYX_ERR(0, 6841, __pyx_L1_error)
    __pyx_t_4 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_copy, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_3);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6841, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_v_out = __pyx_t_4;
  __pyx_t_4 = 0;
+06842:     for pos, target_dtype in convert:
  __pyx_t_4 = __pyx_v_convert; __Pyx_INCREF(__pyx_t_4);
  __pyx_t_9 = 0;
  for (;;) {
    {
      Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4);
      #if !CYTHON_ASSUME_SAFE_SIZE
      if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6842, __pyx_L1_error)
      #endif
      if (__pyx_t_9 >= __pyx_temp) break;
    }
    __pyx_t_3 = __Pyx_PyList_GetItemRefFast(__pyx_t_4, __pyx_t_9, __Pyx_ReferenceSharing_OwnStrongReference);
    ++__pyx_t_9;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6842, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
      PyObject* sequence = __pyx_t_3;
      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(0, 6842, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0);
        __Pyx_INCREF(__pyx_t_7);
        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1);
        __Pyx_INCREF(__pyx_t_5);
      } else {
        __pyx_t_7 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6842, __pyx_L1_error)
        __Pyx_XGOTREF(__pyx_t_7);
        __pyx_t_5 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6842, __pyx_L1_error)
        __Pyx_XGOTREF(__pyx_t_5);
      }
      #else
      __pyx_t_7 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6842, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_5 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6842, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      #endif
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6842, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_12 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_6);
      index = 0; __pyx_t_7 = __pyx_t_12(__pyx_t_6); if (unlikely(!__pyx_t_7)) goto __pyx_L27_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_7);
      index = 1; __pyx_t_5 = __pyx_t_12(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L27_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_5);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_6), 2) < (0)) __PYX_ERR(0, 6842, __pyx_L1_error)
      __pyx_t_12 = NULL;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      goto __pyx_L28_unpacking_done;
      __pyx_L27_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_12 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 6842, __pyx_L1_error)
      __pyx_L28_unpacking_done:;
    }
    __Pyx_XDECREF_SET(__pyx_v_pos, __pyx_t_7);
    __pyx_t_7 = 0;
    __Pyx_XDECREF_SET(__pyx_v_target_dtype, __pyx_t_5);
    __pyx_t_5 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+06843:         _dataframe_set_column(
    __pyx_t_17 = __pyx_f_7questdb_7_client__dataframe_set_column(__pyx_v_out, __pyx_v_df, __pyx_v_pos, __pyx_t_3); if (unlikely(__pyx_t_17 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6843, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06844:             out, df, pos, df.iloc[:, pos].astype(target_dtype))
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6844, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6844, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_slice[0]);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[0]);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_mstate_global->__pyx_slice[0]) != (0)) __PYX_ERR(0, 6844, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_pos);
    __Pyx_GIVEREF(__pyx_v_pos);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_pos) != (0)) __PYX_ERR(0, 6844, __pyx_L1_error);
    __pyx_t_15 = __Pyx_PyObject_GetItem(__pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 6844, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_5 = __pyx_t_15;
    __Pyx_INCREF(__pyx_t_5);
    __pyx_t_8 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_target_dtype};
      __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __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_15); __pyx_t_15 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6844, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
+06845:     out.attrs = dict(df.attrs)
  __pyx_t_3 = NULL;
  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_attrs); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 6845, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __pyx_t_8 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_15};
    __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(&PyDict_Type), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__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(0, 6845, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_out, __pyx_mstate_global->__pyx_n_u_attrs, __pyx_t_4) < (0)) __PYX_ERR(0, 6845, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+06846:     return out
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;
 06847: 
 06848: 
+06849: cdef object _dataframe_normalize_claimed_date(object df):
static PyObject *__pyx_f_7questdb_7_client__dataframe_normalize_claimed_date(PyObject *__pyx_v_df) {
  PyObject *__pyx_v_cols_meta = 0;
  PyObject *__pyx_v_arrow_dtype = 0;
  PyObject *__pyx_v_dtype = 0;
  PyObject *__pyx_v_meta = 0;
  PyObject *__pyx_v_out = 0;
  PyObject *__pyx_v_unit = 0;
  PyObject *__pyx_v_tz = 0;
  PyObject *__pyx_v_kind = 0;
  PyObject *__pyx_v_convert = 0;
  PyObject *__pyx_v_pos = NULL;
  PyObject *__pyx_v_name = NULL;
  PyObject *__pyx_v_target_dtype = 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_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_AddTraceback("questdb._client._dataframe_normalize_claimed_date", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_cols_meta);
  __Pyx_XDECREF(__pyx_v_arrow_dtype);
  __Pyx_XDECREF(__pyx_v_dtype);
  __Pyx_XDECREF(__pyx_v_meta);
  __Pyx_XDECREF(__pyx_v_out);
  __Pyx_XDECREF(__pyx_v_unit);
  __Pyx_XDECREF(__pyx_v_tz);
  __Pyx_XDECREF(__pyx_v_kind);
  __Pyx_XDECREF(__pyx_v_convert);
  __Pyx_XDECREF(__pyx_v_pos);
  __Pyx_XDECREF(__pyx_v_name);
  __Pyx_XDECREF(__pyx_v_target_dtype);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 06850:     """Arrow-backed copies of the millisecond datetime columns claimed
 06851:     as DATE.
 06852: 
 06853:     A DATE column is claimed by the column's own Arrow type, and the
 06854:     NumPy planner has no DATE target of any kind: it reaches DATE only
 06855:     through `col_target_column_arrow`, which needs the column to carry
 06856:     a `pa.timestamp('ms')`. Plain `to_pandas()` hands a DATE column back
 06857:     as a NumPy `datetime64[ms]`, which the planner widens to a
 06858:     microsecond TIMESTAMP -- so reading a table and writing the frame
 06859:     straight back created the destination table with a TIMESTAMP column
 06860:     where the source had DATE, and said nothing.
 06861: 
 06862:     The claim carries the missing half. `'date'` is not in
 06863:     `_ATTRS_OVERRIDE_KINDS` because there is no Arrow override to
 06864:     restore DATE with; what restores it is the column's type, so the
 06865:     claim reshapes the column and the type does the rest. Both Arrow
 06866:     backends already hand the column back as `pa.timestamp('ms')`, so
 06867:     this is what makes the three backends write the same column type.
 06868: 
 06869:     A tz-aware millisecond column is reshaped the same way. On its own
 06870:     the planner refuses that dtype outright, so a claimed one turns a
 06871:     hard rejection into the type the claim names.
 06872: 
 06873:     pyarrow is what carries a column to DATE, and without it the frame
 06874:     has no route there to be put back on -- the same early return the
 06875:     rest of the claim machinery takes.
 06876:     """
 06877:     cdef object cols_meta, arrow_dtype, dtype, meta, out, unit, tz
 06878:     cdef str kind
 06879:     cdef list convert
+06880:     if not _is_pandas_dataframe_object(df):
  __pyx_t_1 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_df); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6880, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {
/* … */
  }
+06881:         return df
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_df);
    __pyx_r = __pyx_v_df;
    goto __pyx_L0;
+06882:     cols_meta = _roundtrip_columns_meta(df)
  __pyx_t_3 = __pyx_f_7questdb_7_client__roundtrip_columns_meta(__pyx_v_df); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6882, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_cols_meta = __pyx_t_3;
  __pyx_t_3 = 0;
+06883:     if not cols_meta:
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_cols_meta); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 6883, __pyx_L1_error)
  __pyx_t_1 = (!__pyx_t_2);
  if (__pyx_t_1) {
/* … */
  }
+06884:         return df
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_df);
    __pyx_r = __pyx_v_df;
    goto __pyx_L0;
+06885:     _dataframe_may_import_deps()
  __pyx_t_3 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6885, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+06886:     arrow_dtype = getattr(_PANDAS, 'ArrowDtype', None)
  __pyx_t_3 = __pyx_v_7questdb_7_client__PANDAS;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_GetAttr3(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_ArrowDtype, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6886, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_arrow_dtype = __pyx_t_4;
  __pyx_t_4 = 0;
+06887:     if arrow_dtype is None:
  __pyx_t_1 = (__pyx_v_arrow_dtype == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+06888:         return df
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_df);
    __pyx_r = __pyx_v_df;
    goto __pyx_L0;
+06889:     if not _dataframe_try_import_pyarrow():
  __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_try_import_pyarrow(); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6889, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {
/* … */
  }
+06890:         return df
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_df);
    __pyx_r = __pyx_v_df;
    goto __pyx_L0;
+06891:     convert = []
  __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_convert = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
 06892:     # Walked by position rather than by label: `dtypes[name]` on a frame
 06893:     # with duplicate column names hands back a Series, not a dtype.
+06894:     for pos, (name, dtype) in enumerate(zip(df.columns, df.dtypes)):
  __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
  __pyx_t_4 = __pyx_mstate_global->__pyx_int_0;
  __pyx_t_5 = NULL;
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6894, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_dtypes); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6894, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = 1;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_6, __pyx_t_7};
    __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_zip, __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_3)) __PYX_ERR(0, 6894, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) {
    __pyx_t_7 = __pyx_t_3; __Pyx_INCREF(__pyx_t_7);
    __pyx_t_9 = 0;
    __pyx_t_10 = NULL;
  } else {
    __pyx_t_9 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6894, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_10 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_7); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 6894, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  for (;;) {
    if (likely(!__pyx_t_10)) {
      if (likely(PyList_CheckExact(__pyx_t_7))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_7);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6894, __pyx_L1_error)
          #endif
          if (__pyx_t_9 >= __pyx_temp) break;
        }
        __pyx_t_3 = __Pyx_PyList_GetItemRefFast(__pyx_t_7, __pyx_t_9, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_9;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_7);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6894, __pyx_L1_error)
          #endif
          if (__pyx_t_9 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_9));
        #else
        __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_7, __pyx_t_9);
        #endif
        ++__pyx_t_9;
      }
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6894, __pyx_L1_error)
    } else {
      __pyx_t_3 = __pyx_t_10(__pyx_t_7);
      if (unlikely(!__pyx_t_3)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 6894, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_3);
    if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
      PyObject* sequence = __pyx_t_3;
      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(0, 6894, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1);
        __Pyx_INCREF(__pyx_t_5);
      } else {
        __pyx_t_6 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6894, __pyx_L1_error)
        __Pyx_XGOTREF(__pyx_t_6);
        __pyx_t_5 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6894, __pyx_L1_error)
        __Pyx_XGOTREF(__pyx_t_5);
      }
      #else
      __pyx_t_6 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6894, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_5 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6894, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      #endif
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_11 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6894, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_12 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_11);
      index = 0; __pyx_t_6 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_6)) goto __pyx_L9_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_6);
      index = 1; __pyx_t_5 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_5)) goto __pyx_L9_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_5);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < (0)) __PYX_ERR(0, 6894, __pyx_L1_error)
      __pyx_t_12 = NULL;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      goto __pyx_L10_unpacking_done;
      __pyx_L9_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_12 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 6894, __pyx_L1_error)
      __pyx_L10_unpacking_done:;
    }
    __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_6);
    __pyx_t_6 = 0;
    __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_5);
    __pyx_t_5 = 0;
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_XDECREF_SET(__pyx_v_pos, __pyx_t_4);
    __pyx_t_3 = __Pyx_PyLong_AddObjC(__pyx_t_4, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6894, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4);
    __pyx_t_4 = __pyx_t_3;
    __pyx_t_3 = 0;
/* … */
    __pyx_L7_continue:;
  }
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+06895:         meta = cols_meta.get(name)
    __pyx_t_5 = __pyx_v_cols_meta;
    __Pyx_INCREF(__pyx_t_5);
    __pyx_t_8 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_name};
      __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6895, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_XDECREF_SET(__pyx_v_meta, __pyx_t_3);
    __pyx_t_3 = 0;
+06896:         kind = _roundtrip_kind(meta)
    __pyx_t_3 = __pyx_f_7questdb_7_client__roundtrip_kind(__pyx_v_meta); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6896, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XDECREF_SET(__pyx_v_kind, ((PyObject*)__pyx_t_3));
    __pyx_t_3 = 0;
+06897:         if kind != 'date':
    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_date, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 6897, __pyx_L1_error)
    if (__pyx_t_2) {
/* … */
    }
+06898:             continue
      goto __pyx_L7_continue;
 06899:         # An Arrow-backed column already states the type itself.
+06900:         if isinstance(dtype, arrow_dtype):
    __pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_v_arrow_dtype); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 6900, __pyx_L1_error)
    if (__pyx_t_2) {
/* … */
    }
+06901:             continue
      goto __pyx_L7_continue;
+06902:         if getattr(dtype, 'kind', None) != 'M':
    __pyx_t_3 = __Pyx_GetAttr3(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_kind, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6902, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_M, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 6902, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_2) {
/* … */
    }
+06903:             continue
      goto __pyx_L7_continue;
+06904:         tz = getattr(dtype, 'tz', None)
    __pyx_t_3 = __Pyx_GetAttr3(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_tz, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6904, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XDECREF_SET(__pyx_v_tz, __pyx_t_3);
    __pyx_t_3 = 0;
+06905:         unit = getattr(dtype, 'unit', None)
    __pyx_t_3 = __Pyx_GetAttr3(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_unit, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6905, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XDECREF_SET(__pyx_v_unit, __pyx_t_3);
    __pyx_t_3 = 0;
+06906:         if unit is None:
    __pyx_t_2 = (__pyx_v_unit == Py_None);
    if (__pyx_t_2) {
/* … */
    }
+06907:             unit = numpy.datetime_data(dtype)[0]
      __pyx_t_5 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_numpy); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6907, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_datetime_data); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6907, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_8 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_11))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_11);
        assert(__pyx_t_5);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_11, __pyx__function);
        __pyx_t_8 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_dtype};
        __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6907, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      __pyx_t_11 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6907, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF_SET(__pyx_v_unit, __pyx_t_11);
      __pyx_t_11 = 0;
 06908:         # Only a millisecond column holds what a DATE column held. A
 06909:         # column retyped to another unit since it was read is drift, and
 06910:         # drift is written as the column's own type implies.
+06911:         if unit != 'ms':
    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_unit, __pyx_mstate_global->__pyx_n_u_ms, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 6911, __pyx_L1_error)
    if (__pyx_t_2) {
/* … */
    }
+06912:             continue
      goto __pyx_L7_continue;
+06913:         convert.append((
    __pyx_t_16 = __Pyx_PyList_Append(__pyx_v_convert, __pyx_t_5); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 6913, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+06914:             pos,
    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6914, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_v_pos);
    __Pyx_GIVEREF(__pyx_v_pos);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_pos) != (0)) __PYX_ERR(0, 6914, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_11);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_11) != (0)) __PYX_ERR(0, 6914, __pyx_L1_error);
    __pyx_t_11 = 0;
+06915:             arrow_dtype(
    __pyx_t_3 = NULL;
    __Pyx_INCREF(__pyx_v_arrow_dtype);
    __pyx_t_5 = __pyx_v_arrow_dtype; 
+06916:                 _PYARROW.timestamp('ms')
      __pyx_t_14 = __pyx_v_7questdb_7_client__PYARROW;
      __Pyx_INCREF(__pyx_t_14);
      __pyx_t_8 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_14, __pyx_mstate_global->__pyx_n_u_ms};
        __pyx_t_13 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_timestamp, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 6916, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_13);
      }
      __pyx_t_6 = __pyx_t_13;
      __pyx_t_13 = 0;
    } else {
+06917:                 if tz is None
    __pyx_t_2 = (__pyx_v_tz == Py_None);
    if (__pyx_t_2) {
+06918:                 else _PYARROW.timestamp('ms', str(tz)))))
      __pyx_t_14 = __pyx_v_7questdb_7_client__PYARROW;
      __Pyx_INCREF(__pyx_t_14);
      __pyx_t_15 = __Pyx_PyObject_Unicode(__pyx_v_tz); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 6918, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __pyx_t_8 = 0;
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_14, __pyx_mstate_global->__pyx_n_u_ms, __pyx_t_15};
        __pyx_t_13 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_timestamp, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 6918, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_13);
      }
      __pyx_t_6 = __pyx_t_13;
      __pyx_t_13 = 0;
    }
    __pyx_t_8 = 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_8 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_6};
      __pyx_t_11 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__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;
      if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6915, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
    }
+06919:     if not convert:
  {
    Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v_convert);
    if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 6919, __pyx_L1_error)
    __pyx_t_2 = (__pyx_temp != 0);
  }

  __pyx_t_1 = (!__pyx_t_2);
  if (__pyx_t_1) {
/* … */
  }
+06920:         return df
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_df);
    __pyx_r = __pyx_v_df;
    goto __pyx_L0;
+06921:     out = df.copy(deep=False)
  __pyx_t_7 = __pyx_v_df;
  __Pyx_INCREF(__pyx_t_7);
  __pyx_t_8 = 0;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_7, NULL};
    __pyx_t_5 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6921, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_deep, Py_False, __pyx_t_5, __pyx_callargs+1, 0) < (0)) __PYX_ERR(0, 6921, __pyx_L1_error)
    __pyx_t_4 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_copy, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (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;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6921, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_v_out = __pyx_t_4;
  __pyx_t_4 = 0;
+06922:     for pos, target_dtype in convert:
  __pyx_t_4 = __pyx_v_convert; __Pyx_INCREF(__pyx_t_4);
  __pyx_t_9 = 0;
  for (;;) {
    {
      Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4);
      #if !CYTHON_ASSUME_SAFE_SIZE
      if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 6922, __pyx_L1_error)
      #endif
      if (__pyx_t_9 >= __pyx_temp) break;
    }
    __pyx_t_5 = __Pyx_PyList_GetItemRefFast(__pyx_t_4, __pyx_t_9, __Pyx_ReferenceSharing_OwnStrongReference);
    ++__pyx_t_9;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6922, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
      PyObject* sequence = __pyx_t_5;
      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(0, 6922, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0);
        __Pyx_INCREF(__pyx_t_7);
        __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1);
        __Pyx_INCREF(__pyx_t_11);
      } else {
        __pyx_t_7 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6922, __pyx_L1_error)
        __Pyx_XGOTREF(__pyx_t_7);
        __pyx_t_11 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6922, __pyx_L1_error)
        __Pyx_XGOTREF(__pyx_t_11);
      }
      #else
      __pyx_t_7 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6922, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_11 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6922, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      #endif
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_6 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6922, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_12 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_6);
      index = 0; __pyx_t_7 = __pyx_t_12(__pyx_t_6); if (unlikely(!__pyx_t_7)) goto __pyx_L20_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_7);
      index = 1; __pyx_t_11 = __pyx_t_12(__pyx_t_6); if (unlikely(!__pyx_t_11)) goto __pyx_L20_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_11);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_6), 2) < (0)) __PYX_ERR(0, 6922, __pyx_L1_error)
      __pyx_t_12 = NULL;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      goto __pyx_L21_unpacking_done;
      __pyx_L20_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_12 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 6922, __pyx_L1_error)
      __pyx_L21_unpacking_done:;
    }
    __Pyx_XDECREF_SET(__pyx_v_pos, __pyx_t_7);
    __pyx_t_7 = 0;
    __Pyx_XDECREF_SET(__pyx_v_target_dtype, __pyx_t_11);
    __pyx_t_11 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+06923:         _dataframe_set_column(
    __pyx_t_17 = __pyx_f_7questdb_7_client__dataframe_set_column(__pyx_v_out, __pyx_v_df, __pyx_v_pos, __pyx_t_5); if (unlikely(__pyx_t_17 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 6923, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+06924:             out, df, pos, df.iloc[:, pos].astype(target_dtype))
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6924, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6924, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_slice[0]);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[0]);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_mstate_global->__pyx_slice[0]) != (0)) __PYX_ERR(0, 6924, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_pos);
    __Pyx_GIVEREF(__pyx_v_pos);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_pos) != (0)) __PYX_ERR(0, 6924, __pyx_L1_error);
    __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6924, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_11 = __pyx_t_3;
    __Pyx_INCREF(__pyx_t_11);
    __pyx_t_8 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_v_target_dtype};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6924, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
+06925:     out.attrs = dict(df.attrs)
  __pyx_t_5 = NULL;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_attrs); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6925, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_8 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_3};
    __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(&PyDict_Type), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 6925, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_out, __pyx_mstate_global->__pyx_n_u_attrs, __pyx_t_4) < (0)) __PYX_ERR(0, 6925, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+06926:     return out
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;
 06927: 
 06928: 
+06929: cdef void_int _dataframe_claim_all_null_source(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_claim_all_null_source(struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col, PyObject *__pyx_v_kind, PyObject *__pyx_v_bits) {
  __pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("questdb._client._dataframe_claim_all_null_source", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 06930:         col_t* col, str kind, object bits) except -1:
 06931:     """Give an all-null claimed column the object-column shape its
 06932:     claim names.
 06933: 
 06934:     Every cell being null leaves the planner nothing to sniff a type
 06935:     from, so such a column is skipped and never reaches the wire. A
 06936:     round-trip claim states the type anyway, and a destination table
 06937:     auto-created without the column is the outcome the claim exists to
 06938:     prevent -- so the claim picks the source, and the object-column
 06939:     builder writes a column of nulls in the claimed width. This is the
 06940:     same source the shape would have taken with one non-null cell in
 06941:     it, and what the Arrow path emits for the same frame.
 06942: 
 06943:     A claim the column cannot carry -- a geohash precision outside
 06944:     1..=60 -- leaves the column skipped, and the tail of
 06945:     `_dataframe_apply_roundtrip_overrides` says so, as it does for any
 06946:     claim no source took.
 06947:     """
+06948:     if kind == 'uuid':
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_uuid, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6948, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+06949:         col.setup.source = col_source_t.col_source_bytes_pyobj
    __pyx_v_col->setup->source = __pyx_e_7questdb_7_client_col_source_bytes_pyobj;
+06950:         col.setup.target = col_target_t.col_target_column_binary
    __pyx_v_col->setup->target = __pyx_e_7questdb_7_client_col_target_column_binary;
+06951:     elif kind in ('ipv4', 'char', 'long256', 'geohash'):
  __Pyx_INCREF(__pyx_v_kind);
  __pyx_t_2 = __pyx_v_kind;
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ipv4, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 6951, __pyx_L1_error)
  if (!__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_char_2, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 6951, __pyx_L1_error)
  if (!__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_long256, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 6951, __pyx_L1_error)
  if (!__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_geohash_2, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 6951, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_3 = __pyx_t_1;
  if (__pyx_t_3) {
/* … */
    goto __pyx_L3;
  }
+06952:         if kind == 'geohash' and not (
    __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_geohash_2, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 6952, __pyx_L1_error)
    if (__pyx_t_1) {
    } else {
      __pyx_t_3 = __pyx_t_1;
      goto __pyx_L9_bool_binop_done;
    }
/* … */
    __pyx_t_4 = (!__pyx_t_1);
    __pyx_t_3 = __pyx_t_4;
    __pyx_L9_bool_binop_done:;
    if (__pyx_t_3) {
/* … */
    }
+06953:                 _is_integral_not_bool(bits) and 1 <= int(bits) <= 60):
    __pyx_t_4 = __pyx_f_7questdb_7_client__is_integral_not_bool(__pyx_v_bits); if (unlikely(__pyx_t_4 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6953, __pyx_L1_error)
    if (__pyx_t_4) {
    } else {
      __pyx_t_1 = __pyx_t_4;
      goto __pyx_L11_bool_binop_done;
    }
    __pyx_t_5 = __Pyx_PyNumber_Int(__pyx_v_bits); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6953, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = PyObject_RichCompare(__pyx_mstate_global->__pyx_int_1, __pyx_t_5, Py_LE); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6953, __pyx_L1_error)
    if (__Pyx_PyObject_IsTrue(__pyx_t_6)) {
      __Pyx_DECREF(__pyx_t_6);
      __pyx_t_6 = PyObject_RichCompare(__pyx_t_5, __pyx_mstate_global->__pyx_int_60, Py_LE); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6953, __pyx_L1_error)
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 6953, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_1 = __pyx_t_4;
    __pyx_L11_bool_binop_done:;
+06954:             return 0
      __pyx_r = 0;
      goto __pyx_L0;
+06955:         col.setup.source = col_source_t.col_source_int_pyobj
    __pyx_v_col->setup->source = __pyx_e_7questdb_7_client_col_source_int_pyobj;
+06956:         col.setup.target = col_target_t.col_target_column_i64
    __pyx_v_col->setup->target = __pyx_e_7questdb_7_client_col_target_column_i64;
 06957:     else:
+06958:         return 0
  /*else*/ {
    __pyx_r = 0;
    goto __pyx_L0;
  }
  __pyx_L3:;
+06959:     col.dispatch_code = <col_dispatch_code_t>(
  __pyx_v_col->dispatch_code = ((enum __pyx_t_7questdb_7_client_col_dispatch_code_t)(((int)__pyx_v_col->setup->source) + ((int)__pyx_v_col->setup->target)));
 06960:         <int>col.setup.source + <int>col.setup.target)
+06961:     return 0
  __pyx_r = 0;
  goto __pyx_L0;
 06962: 
 06963: 
+06964: cdef _log_roundtrip_claim_dropped(object name, str kind, object shape):
static PyObject *__pyx_f_7questdb_7_client__log_roundtrip_claim_dropped(PyObject *__pyx_v_name, PyObject *__pyx_v_kind, PyObject *__pyx_v_shape) {
  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_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("questdb._client._log_roundtrip_claim_dropped", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 06965:     """Say that a column's ``df.attrs['questdb']`` claim was not applied.
 06966: 
 06967:     A claim that no longer matches its column is not an error. The frame
 06968:     may have been retyped since it was read, and the write goes ahead as
 06969:     the column's own type implies -- rejecting it would answer ordinary
 06970:     schema drift with a failure.
 06971: 
 06972:     A claim quietly doing nothing is also how a column reaches the
 06973:     database as the wrong type, though, and the two are indistinguishable
 06974:     from the outside. Drift is the case the silence is for; a type that
 06975:     can never carry the kind -- a float under ``geohash``, say, or a
 06976:     16-bit integer claimed at 20 bits -- is a mistake the caller wants
 06977:     to hear about. Naming the claim and the type
 06978:     that turned it away tells them apart without failing either.
 06979: 
 06980:     This leniency covers ``df.attrs`` claims alone. The same claim in
 06981:     Arrow field metadata (``questdb.column_type``) is refused when the
 06982:     field's type cannot carry it, deliberately; `_capsule_consume_stream`
 06983:     says why the two routes differ.
 06984:     """
 06985:     # A stale claim does not invalidate the frame. Unlike the naive-datetime
 06986:     # and reconnect warnings, it is not a migration/performance pattern the
 06987:     # caller should be able to promote to an error with `-W error`.
+06988:     logging.getLogger('questdb').warning(
  __pyx_t_4 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6988, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_getLogger); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6988, __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_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[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_n_u_questdb};
    __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __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;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6988, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_t_2 = __pyx_t_3;
  __Pyx_INCREF(__pyx_t_2);
 06989:         'questdb: column %r carries a df.attrs[\'questdb\'] claim of '
 06990:         'kind %r, which a column of type %s cannot carry. The claim is '
 06991:         'ignored, and the column goes out as its own type decides -- '
 06992:         'which for some shapes means it is left out of the write, or '
 06993:         'refused by it. Cast the column to a type the kind fits, state '
 06994:         'the type outright with schema_overrides, or drop the claim to '
 06995:         'silence this.',
 06996:         name,
 06997:         kind,
+06998:         shape)
  __pyx_t_7 = 0;
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_questdb_column_r_carries_a_df_at_2, __pyx_v_name, __pyx_v_kind, __pyx_v_shape};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_warning, __pyx_callargs+__pyx_t_7, (5-__pyx_t_7) | (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(0, 6988, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 06999: 
 07000: 
+07001: cdef bint _roundtrip_claim_already_carried(
static int __pyx_f_7questdb_7_client__roundtrip_claim_already_carried(PyObject *__pyx_v_kind, struct __pyx_t_7questdb_7_client_col_t const *__pyx_v_col) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("questdb._client._roundtrip_claim_already_carried", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}
 07002:         str kind, const col_t* col) noexcept:
 07003:     """Whether the column carries the claimed kind without an override.
 07004: 
 07005:     An object column of `uuid.UUID` or `ipaddress.IPv4Address` is
 07006:     already written as UUID or IPV4 by the source alone -- which is the
 07007:     shape plain `to_pandas()` hands back -- so no override is set for
 07008:     it and none is missing. Without this, the claim such a frame comes
 07009:     back with would be reported as dropped on every write, on the one
 07010:     path the claim exists to serve.
 07011: 
 07012:     `col_source_fsb_claimed_arrow` is the classifier acting on the
 07013:     claim itself: it takes that source only for a `uuid` claim on a
 07014:     16-byte column or a `long256` claim on a 32-byte one, so the width
 07015:     already names the kind.
 07016:     """
+07017:     if kind == 'uuid':
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_uuid, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 7017, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+07018:         return (col.setup.source == col_source_t.col_source_uuid_pyobj
      case __pyx_e_7questdb_7_client_col_source_fsb_claimed_arrow:
+07019:                 or col.setup.source
    switch (__pyx_v_col->setup->source) {
      case __pyx_e_7questdb_7_client_col_source_uuid_pyobj:
/* … */
      __pyx_t_1 = 1;
      break;
      default:
      __pyx_t_1 = 0;
      break;
    }
    __pyx_r = __pyx_t_1;
    goto __pyx_L0;
 07020:                     == col_source_t.col_source_fsb_claimed_arrow)
+07021:     if kind == 'long256':
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_long256, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 7021, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
 07022:         return (col.setup.source
+07023:                 == col_source_t.col_source_fsb_claimed_arrow)
    __pyx_r = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_fsb_claimed_arrow);
    goto __pyx_L0;
+07024:     if kind == 'ipv4':
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_ipv4, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 7024, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+07025:         return col.setup.source == col_source_t.col_source_ipv4_pyobj
    __pyx_r = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_ipv4_pyobj);
    goto __pyx_L0;
+07026:     return False
  __pyx_r = 0;
  goto __pyx_L0;
 07027: 
 07028: 
+07029: cdef void_int _dataframe_apply_roundtrip_overrides(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_apply_roundtrip_overrides(PyObject *__pyx_v_df, struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan) {
  size_t __pyx_v_col_index;
  struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col;
  int __pyx_v_gh;
  PyObject *__pyx_v_arrow_dtype = 0;
  PyObject *__pyx_v_dtype = 0;
  PyObject *__pyx_v_cols_meta = NULL;
  PyObject *__pyx_v_df_cols = NULL;
  PyObject *__pyx_v_meta = NULL;
  PyObject *__pyx_v_kind = NULL;
  PyObject *__pyx_v_bits = NULL;
  __pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("questdb._client._dataframe_apply_roundtrip_overrides", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_arrow_dtype);
  __Pyx_XDECREF(__pyx_v_dtype);
  __Pyx_XDECREF(__pyx_v_cols_meta);
  __Pyx_XDECREF(__pyx_v_df_cols);
  __Pyx_XDECREF(__pyx_v_meta);
  __Pyx_XDECREF(__pyx_v_kind);
  __Pyx_XDECREF(__pyx_v_bits);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 07030:         object df, dataframe_plan_t* plan) except -1:
 07031:     cdef size_t col_index
 07032:     cdef col_t* col
 07033:     cdef int gh
 07034:     cdef object arrow_dtype, dtype
+07035:     for col_index in range(plan.col_count):
  __pyx_t_1 = __pyx_v_plan->col_count;
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_col_index = __pyx_t_3;
+07036:         plan.cols.d[col_index].setup.has_override = False
    (__pyx_v_plan->cols.d[__pyx_v_col_index]).setup->has_override = 0;
  }
+07037:     cols_meta = _roundtrip_columns_meta(df)
  __pyx_t_4 = __pyx_f_7questdb_7_client__roundtrip_columns_meta(__pyx_v_df); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7037, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_cols_meta = __pyx_t_4;
  __pyx_t_4 = 0;
+07038:     if not cols_meta:
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_cols_meta); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 7038, __pyx_L1_error)
  __pyx_t_6 = (!__pyx_t_5);
  if (__pyx_t_6) {
/* … */
  }
+07039:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
+07040:     df_cols = list(df.columns)
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7040, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_7 = __Pyx_PySequence_ListKeepNew(__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7040, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_df_cols = ((PyObject*)__pyx_t_7);
  __pyx_t_7 = 0;
+07041:     _dataframe_may_import_deps()
  __pyx_t_7 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7041, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+07042:     arrow_dtype = getattr(_PANDAS, 'ArrowDtype', None)
  __pyx_t_7 = __pyx_v_7questdb_7_client__PANDAS;
  __Pyx_INCREF(__pyx_t_7);
  __pyx_t_4 = __Pyx_GetAttr3(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_ArrowDtype, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7042, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_arrow_dtype = __pyx_t_4;
  __pyx_t_4 = 0;
+07043:     for col_index in range(plan.col_count):
  __pyx_t_1 = __pyx_v_plan->col_count;
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_col_index = __pyx_t_3;
+07044:         col = &plan.cols.d[col_index]
    __pyx_v_col = (&(__pyx_v_plan->cols.d[__pyx_v_col_index]));
+07045:         if col.setup.orig_index >= <size_t>len(df_cols):
    __pyx_t_8 = __Pyx_PyList_GET_SIZE(__pyx_v_df_cols); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 7045, __pyx_L1_error)
    __pyx_t_6 = (__pyx_v_col->setup->orig_index >= ((size_t)__pyx_t_8));
    if (__pyx_t_6) {
/* … */
    }
+07046:             continue
      goto __pyx_L6_continue;
+07047:         meta = cols_meta.get(df_cols[col.setup.orig_index])
    __pyx_t_7 = __pyx_v_cols_meta;
    __Pyx_INCREF(__pyx_t_7);
    __pyx_t_9 = __Pyx_GetItemInt_List(__pyx_v_df_cols, __pyx_v_col->setup->orig_index, size_t, 0, __Pyx_PyLong_FromSize_t, 1, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7047, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_10 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_9};
      __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (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_4)) __PYX_ERR(0, 7047, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_XDECREF_SET(__pyx_v_meta, __pyx_t_4);
    __pyx_t_4 = 0;
+07048:         kind = _roundtrip_kind(meta)
    __pyx_t_4 = __pyx_f_7questdb_7_client__roundtrip_kind(__pyx_v_meta); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7048, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_XDECREF_SET(__pyx_v_kind, ((PyObject*)__pyx_t_4));
    __pyx_t_4 = 0;
+07049:         if kind is None:
    __pyx_t_6 = (__pyx_v_kind == ((PyObject*)Py_None));
    if (__pyx_t_6) {
/* … */
    }
+07050:             continue
      goto __pyx_L6_continue;
+07051:         if col.setup.source == col_source_t.col_source_nulls:
    __pyx_t_6 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_nulls);
    if (__pyx_t_6) {
/* … */
    }
+07052:             _dataframe_claim_all_null_source(
      __pyx_t_11 = __pyx_f_7questdb_7_client__dataframe_claim_all_null_source(__pyx_v_col, __pyx_v_kind, __pyx_t_4); if (unlikely(__pyx_t_11 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7052, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+07053:                 col, kind, meta.get('precision_bits') or 0)
      __pyx_t_7 = __pyx_v_meta;
      __Pyx_INCREF(__pyx_t_7);
      __pyx_t_10 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_n_u_precision_bits};
        __pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7053, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
      }
      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 7053, __pyx_L1_error)
      if (!__pyx_t_6) {
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      } else {
        __Pyx_INCREF(__pyx_t_9);
        __pyx_t_4 = __pyx_t_9;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        goto __pyx_L11_bool_binop_done;
      }
      __pyx_t_9 = __Pyx_PyLong_From_long(0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7053, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_4 = __pyx_t_9;
      __pyx_t_9 = 0;
      __pyx_L11_bool_binop_done:;
 07054:         # `col_source_int_pyobj` is what a pandas masked dtype turns
 07055:         # into: `to_pandas(dtype_backend='numpy_nullable')` returns
 07056:         # IPV4 / CHAR / GEOHASH as UInt32 / UInt16 / Int* extension
 07057:         # columns, and `_dataframe_normalize_nullable` converts every
 07058:         # masked column to object-dtype Python ints before planning.
 07059:         # `col_source_bytes_pyobj` is the same story for the two binary
 07060:         # kinds, which that backend hands back as object-dtype `bytes`.
 07061:         # `col_source_u32_arrow` is an Arrow uint32 column, which
 07062:         # resolves to `col_target_column_i64` and so reaches the wire as
 07063:         # a raw buffer with the append call naming its dtype — the same
 07064:         # place the claim lands for the NumPy and object shapes.
+07065:         if (kind == 'ipv4'
    __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_ipv4, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 7065, __pyx_L1_error)
    if (__pyx_t_5) {
    } else {
      __pyx_t_6 = __pyx_t_5;
      goto __pyx_L14_bool_binop_done;
    }
/* … */
    if (__pyx_t_6) {
/* … */
      goto __pyx_L13;
    }
+07066:                 and col.setup.source in (
    switch (__pyx_v_col->setup->source) {
      case __pyx_e_7questdb_7_client_col_source_u32_numpy:
/* … */
      __pyx_t_5 = 1;
      break;
      default:
      __pyx_t_5 = 0;
      break;
    }
    __pyx_t_12 = __pyx_t_5;
    __pyx_t_6 = __pyx_t_12;
    __pyx_L14_bool_binop_done:;
+07067:                     col_source_t.col_source_u32_numpy,
      case __pyx_e_7questdb_7_client_col_source_u32_arrow:
+07068:                     col_source_t.col_source_u32_arrow,
      case __pyx_e_7questdb_7_client_col_source_int_pyobj:
 07069:                     col_source_t.col_source_int_pyobj)):
+07070:             col.setup.has_override = True
      __pyx_v_col->setup->has_override = 1;
+07071:             col.setup.override_dtype = \
      __pyx_v_col->setup->override_dtype = qwp_numpy_u32_ipv4;
 07072:                 qwp_numpy_dtype.qwp_numpy_u32_ipv4
+07073:         elif (kind == 'char'
    __pyx_t_12 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_char_2, Py_EQ)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 7073, __pyx_L1_error)
    if (__pyx_t_12) {
    } else {
      __pyx_t_6 = __pyx_t_12;
      goto __pyx_L16_bool_binop_done;
    }
/* … */
    if (__pyx_t_6) {
/* … */
      goto __pyx_L13;
    }
+07074:                 and col.setup.source in (
    switch (__pyx_v_col->setup->source) {
      case __pyx_e_7questdb_7_client_col_source_u16_numpy:
/* … */
      __pyx_t_12 = 1;
      break;
      default:
      __pyx_t_12 = 0;
      break;
    }
    __pyx_t_5 = __pyx_t_12;
    __pyx_t_6 = __pyx_t_5;
    __pyx_L16_bool_binop_done:;
+07075:                     col_source_t.col_source_u16_numpy,
      case __pyx_e_7questdb_7_client_col_source_int_pyobj:
 07076:                     col_source_t.col_source_int_pyobj)):
+07077:             col.setup.has_override = True
      __pyx_v_col->setup->has_override = 1;
+07078:             col.setup.override_dtype = \
      __pyx_v_col->setup->override_dtype = qwp_numpy_u16_char;
 07079:                 qwp_numpy_dtype.qwp_numpy_u16_char
+07080:         elif (kind == 'uuid'
    __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_uuid, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 7080, __pyx_L1_error)
    if (__pyx_t_5) {
    } else {
      __pyx_t_6 = __pyx_t_5;
      goto __pyx_L18_bool_binop_done;
    }
/* … */
    if (__pyx_t_6) {
/* … */
      goto __pyx_L13;
    }
+07081:                 and col.setup.source == col_source_t.col_source_bytes_pyobj):
    __pyx_t_5 = (__pyx_v_col->setup->source == __pyx_e_7questdb_7_client_col_source_bytes_pyobj);
    __pyx_t_6 = __pyx_t_5;
    __pyx_L18_bool_binop_done:;
+07082:             col.setup.has_override = True
      __pyx_v_col->setup->has_override = 1;
+07083:             col.setup.override_dtype = qwp_numpy_dtype.qwp_numpy_s16
      __pyx_v_col->setup->override_dtype = qwp_numpy_s16;
+07084:         elif (kind == 'long256'
    __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_long256, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 7084, __pyx_L1_error)
    if (__pyx_t_5) {
    } else {
      __pyx_t_6 = __pyx_t_5;
      goto __pyx_L20_bool_binop_done;
    }
/* … */
    if (__pyx_t_6) {
/* … */
      goto __pyx_L13;
    }
+07085:                 and col.setup.source in (
    switch (__pyx_v_col->setup->source) {
      case __pyx_e_7questdb_7_client_col_source_int_pyobj:
/* … */
      __pyx_t_5 = 1;
      break;
      default:
      __pyx_t_5 = 0;
      break;
    }
    __pyx_t_12 = __pyx_t_5;
    __pyx_t_6 = __pyx_t_12;
    __pyx_L20_bool_binop_done:;
+07086:                     col_source_t.col_source_int_pyobj,
      case __pyx_e_7questdb_7_client_col_source_bytes_pyobj:
 07087:                     col_source_t.col_source_bytes_pyobj)):
 07088:             # Plain `to_pandas()` hands a LONG256 column back as Python
 07089:             # ints — the only shape wide enough to hold one without
 07090:             # pyarrow — and `numpy_nullable` as raw 32-byte `bytes`.
 07091:             # Either way the claim is what tells the 32-byte encoder
 07092:             # from the LONG or BINARY column the shape alone implies.
+07093:             col.setup.has_override = True
      __pyx_v_col->setup->has_override = 1;
+07094:             col.setup.override_dtype = qwp_numpy_dtype.qwp_numpy_s32
      __pyx_v_col->setup->override_dtype = qwp_numpy_s32;
+07095:         elif kind == 'geohash':
    __pyx_t_6 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_geohash_2, Py_EQ)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 7095, __pyx_L1_error)
    if (__pyx_t_6) {
/* … */
    }
    __pyx_L13:;
+07096:             gh = _geohash_override_dtype(col.setup.source)
      __pyx_v_gh = __pyx_f_7questdb_7_client__geohash_override_dtype(__pyx_v_col->setup->source);
+07097:             bits = meta.get('precision_bits') or 0
      __pyx_t_7 = __pyx_v_meta;
      __Pyx_INCREF(__pyx_t_7);
      __pyx_t_10 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_n_u_precision_bits};
        __pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7097, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
      }
      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 7097, __pyx_L1_error)
      if (!__pyx_t_6) {
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      } else {
        __Pyx_INCREF(__pyx_t_9);
        __pyx_t_4 = __pyx_t_9;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        goto __pyx_L22_bool_binop_done;
      }
      __pyx_t_9 = __Pyx_PyLong_From_long(0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7097, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_4 = __pyx_t_9;
      __pyx_t_9 = 0;
      __pyx_L22_bool_binop_done:;
      __Pyx_XDECREF_SET(__pyx_v_bits, __pyx_t_4);
      __pyx_t_4 = 0;
+07098:             bits = int(bits) if _is_integral_not_bool(bits) else 0
      __pyx_t_6 = __pyx_f_7questdb_7_client__is_integral_not_bool(__pyx_v_bits); if (unlikely(__pyx_t_6 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 7098, __pyx_L1_error)
      if (__pyx_t_6) {
        __pyx_t_9 = __Pyx_PyNumber_Int(__pyx_v_bits); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7098, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_4 = __pyx_t_9;
        __pyx_t_9 = 0;
      } else {
        __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
        __pyx_t_4 = __pyx_mstate_global->__pyx_int_0;
      }
      __Pyx_DECREF_SET(__pyx_v_bits, __pyx_t_4);
      __pyx_t_4 = 0;
 07099:             # The precision is held to the column's own width, not just
 07100:             # to 1..=60. A claim wider than the slot carrying it is one
 07101:             # the column cannot express, so it is dropped rather than
 07102:             # left for the native writer to refuse mid-flush, with the
 07103:             # connection already open and a message naming neither the
 07104:             # column nor the claim.
+07105:             if (gh != _GEOHASH_DTYPE_NONE
      __pyx_t_12 = (__pyx_v_gh != __pyx_v_7questdb_7_client__GEOHASH_DTYPE_NONE);
      if (__pyx_t_12) {
      } else {
        __pyx_t_6 = __pyx_t_12;
        goto __pyx_L25_bool_binop_done;
      }
/* … */
      if (__pyx_t_6) {
/* … */
      }
+07106:                     and gh != _GEOHASH_DTYPE_UNSIGNED
      __pyx_t_12 = (__pyx_v_gh != __pyx_v_7questdb_7_client__GEOHASH_DTYPE_UNSIGNED);
      if (__pyx_t_12) {
      } else {
        __pyx_t_6 = __pyx_t_12;
        goto __pyx_L25_bool_binop_done;
      }
+07107:                     and 1 <= bits <= _geohash_dtype_max_bits(gh)):
      __pyx_t_4 = PyObject_RichCompare(__pyx_mstate_global->__pyx_int_1, __pyx_v_bits, Py_LE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7107, __pyx_L1_error)
      if (__Pyx_PyObject_IsTrue(__pyx_t_4)) {
        __Pyx_DECREF(__pyx_t_4);
        __pyx_t_9 = __Pyx_PyLong_From_int(__pyx_f_7questdb_7_client__geohash_dtype_max_bits(__pyx_v_gh)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7107, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_4 = PyObject_RichCompare(__pyx_v_bits, __pyx_t_9, Py_LE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7107, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      }
      __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 7107, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_6 = __pyx_t_12;
      __pyx_L25_bool_binop_done:;
+07108:                 col.setup.has_override = True
        __pyx_v_col->setup->has_override = 1;
+07109:                 col.setup.override_dtype = <qwp_numpy_dtype>gh
        __pyx_v_col->setup->override_dtype = ((enum qwp_numpy_dtype)__pyx_v_gh);
+07110:                 col.setup.override_geohash_bits = <uint8_t>bits
        __pyx_t_13 = __Pyx_PyLong_As_uint8_t(__pyx_v_bits); if (unlikely((__pyx_t_13 == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 7110, __pyx_L1_error)
        __pyx_v_col->setup->override_geohash_bits = ((uint8_t)__pyx_t_13);
+07111:         if (not col.setup.has_override
    __pyx_t_12 = (!__pyx_v_col->setup->has_override);
    if (__pyx_t_12) {
    } else {
      __pyx_t_6 = __pyx_t_12;
      goto __pyx_L29_bool_binop_done;
    }
/* … */
    if (__pyx_t_6) {
/* … */
    }
    __pyx_L6_continue:;
  }
+07112:                 and kind in _ATTRS_OVERRIDE_KINDS
    if (unlikely(__pyx_v_7questdb_7_client__ATTRS_OVERRIDE_KINDS == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 7112, __pyx_L1_error)
    }
    __pyx_t_12 = (__Pyx_PyDict_ContainsTF(__pyx_v_kind, __pyx_v_7questdb_7_client__ATTRS_OVERRIDE_KINDS, Py_EQ)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 7112, __pyx_L1_error)
    if (__pyx_t_12) {
    } else {
      __pyx_t_6 = __pyx_t_12;
      goto __pyx_L29_bool_binop_done;
    }
+07113:                 and not _roundtrip_claim_already_carried(kind, col)):
    __pyx_t_12 = (!__pyx_f_7questdb_7_client__roundtrip_claim_already_carried(__pyx_v_kind, __pyx_v_col));
    __pyx_t_6 = __pyx_t_12;
    __pyx_L29_bool_binop_done:;
 07114:             # The claim names a kind this column cannot carry -- a
 07115:             # width that cannot hold the precision, an unsigned column,
 07116:             # or a type with no route to the kind at all. That is a
 07117:             # mistake rather than drift, so it is said out loud, and
 07118:             # saying it here rather than per kind is what makes all
 07119:             # five answer the way the Arrow path already answers them.
 07120:             # The write still goes ahead as the column's own type
 07121:             # implies.
 07122:             #
 07123:             # An Arrow-backed column has already been through
 07124:             # `_dataframe_normalize_claimed_arrow`, which says the same
 07125:             # thing against the Arrow type and is the one that knows
 07126:             # whether the claim could be reshaped. Saying it twice for
 07127:             # one claim would be worse than either.
+07128:             dtype = df.dtypes.iloc[col.setup.orig_index]
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_dtypes); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7128, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7128, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_9, __pyx_v_col->setup->orig_index, size_t, 0, __Pyx_PyLong_FromSize_t, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7128, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_4);
      __pyx_t_4 = 0;
+07129:             if arrow_dtype is None or not isinstance(dtype, arrow_dtype):
      __pyx_t_12 = (__pyx_v_arrow_dtype == Py_None);
      if (!__pyx_t_12) {
      } else {
        __pyx_t_6 = __pyx_t_12;
        goto __pyx_L33_bool_binop_done;
      }
      __pyx_t_12 = PyObject_IsInstance(__pyx_v_dtype, __pyx_v_arrow_dtype); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 7129, __pyx_L1_error)
      __pyx_t_5 = (!__pyx_t_12);
      __pyx_t_6 = __pyx_t_5;
      __pyx_L33_bool_binop_done:;
      if (__pyx_t_6) {
/* … */
      }
+07130:                 _log_roundtrip_claim_dropped(
        __pyx_t_9 = __pyx_f_7questdb_7_client__log_roundtrip_claim_dropped(__pyx_t_4, __pyx_v_kind, __pyx_v_dtype); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7130, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+07131:                     df_cols[col.setup.orig_index], kind, dtype)
        __pyx_t_4 = __Pyx_GetItemInt_List(__pyx_v_df_cols, __pyx_v_col->setup->orig_index, size_t, 0, __Pyx_PyLong_FromSize_t, 1, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7131, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
+07132:     return 0
  __pyx_r = 0;
  goto __pyx_L0;
 07133: 
 07134: 
+07135: cdef void_int _dataframe_columnar_populate_chunk(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_populate_chunk(struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan, struct qwp_chunk *__pyx_v_chunk, size_t __pyx_v_row_offset, size_t __pyx_v_row_count) {
  size_t __pyx_v_col_index;
  struct __pyx_t_7questdb_7_client_col_t *__pyx_v_col;
  struct __pyx_t_7questdb_7_client_col_t *__pyx_v_at_col;
  size_t __pyx_v_at_col_index;
  size_t __pyx_v_field_count;
  struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_prebuilt;
  struct __pyx_t_7questdb_7_client_pyobj_built_t *__pyx_v_at_prebuilt;
  struct line_sender_error *__pyx_v_err;
  __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_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("questdb._client._dataframe_columnar_populate_chunk", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 07136:         dataframe_plan_t* plan,
 07137:         qwp_chunk* chunk,
 07138:         size_t row_offset,
 07139:         size_t row_count) except -1:
 07140:     cdef size_t col_index
 07141:     cdef col_t* col
+07142:     cdef col_t* at_col = NULL
  __pyx_v_at_col = NULL;
+07143:     cdef size_t at_col_index = 0
  __pyx_v_at_col_index = 0;
+07144:     cdef size_t field_count = 0
  __pyx_v_field_count = 0;
+07145:     cdef pyobj_built_t* prebuilt = NULL
  __pyx_v_prebuilt = NULL;
+07146:     cdef pyobj_built_t* at_prebuilt = NULL
  __pyx_v_at_prebuilt = NULL;
+07147:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 07148: 
+07149:     for col_index in range(plan.col_count):
  __pyx_t_1 = __pyx_v_plan->col_count;
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_col_index = __pyx_t_3;
+07150:         col = &plan.cols.d[col_index]
    __pyx_v_col = (&(__pyx_v_plan->cols.d[__pyx_v_col_index]));
+07151:         if col.setup.target == col_target_t.col_target_at:
    __pyx_t_4 = (__pyx_v_col->setup->target == __pyx_e_7questdb_7_client_col_target_at);
    if (__pyx_t_4) {
/* … */
      goto __pyx_L5;
    }
+07152:             at_col = col
      __pyx_v_at_col = __pyx_v_col;
+07153:             at_col_index = col_index
      __pyx_v_at_col_index = __pyx_v_col_index;
+07154:         elif col.setup.target in (
    switch (__pyx_v_col->setup->target) {
      case __pyx_e_7questdb_7_client_col_target_column_bool:
/* … */
      __pyx_t_4 = 1;
      break;
      default:
      __pyx_t_4 = 0;
      break;
    }
    __pyx_t_5 = __pyx_t_4;
    if (__pyx_t_5) {
/* … */
      goto __pyx_L5;
    }
+07155:                 col_target_t.col_target_column_bool,
      case __pyx_e_7questdb_7_client_col_target_column_i64:
+07156:                 col_target_t.col_target_column_i64,
      case __pyx_e_7questdb_7_client_col_target_column_f64:
+07157:                 col_target_t.col_target_column_f64,
      case __pyx_e_7questdb_7_client_col_target_column_ts:
+07158:                 col_target_t.col_target_column_ts,
      case __pyx_e_7questdb_7_client_col_target_column_str:
+07159:                 col_target_t.col_target_column_str,
      case __pyx_e_7questdb_7_client_col_target_symbol:
+07160:                 col_target_t.col_target_symbol,
      case __pyx_e_7questdb_7_client_col_target_column_i8:
+07161:                 col_target_t.col_target_column_i8,
      case __pyx_e_7questdb_7_client_col_target_column_i16:
+07162:                 col_target_t.col_target_column_i16,
      case __pyx_e_7questdb_7_client_col_target_column_i32:
+07163:                 col_target_t.col_target_column_i32,
      case __pyx_e_7questdb_7_client_col_target_column_f32:
+07164:                 col_target_t.col_target_column_f32,
      case __pyx_e_7questdb_7_client_col_target_column_uuid:
+07165:                 col_target_t.col_target_column_uuid,
      case __pyx_e_7questdb_7_client_col_target_column_ipv4:
+07166:                 col_target_t.col_target_column_ipv4,
      case __pyx_e_7questdb_7_client_col_target_column_binary:
+07167:                 col_target_t.col_target_column_binary,
      case __pyx_e_7questdb_7_client_col_target_column_arrow:
+07168:                 col_target_t.col_target_column_arrow,
      case __pyx_e_7questdb_7_client_col_target_column_decimal:
 07169:                 col_target_t.col_target_column_decimal):
+07170:             if plan.pyobj_built != NULL:
      __pyx_t_5 = (__pyx_v_plan->pyobj_built != NULL);
      if (__pyx_t_5) {
/* … */
        goto __pyx_L6;
      }
+07171:                 prebuilt = plan.pyobj_built[col_index]
        __pyx_v_prebuilt = (__pyx_v_plan->pyobj_built[__pyx_v_col_index]);
 07172:             else:
+07173:                 prebuilt = NULL
      /*else*/ {
        __pyx_v_prebuilt = NULL;
      }
      __pyx_L6:;
+07174:             _dataframe_columnar_append_field(
      __pyx_t_6 = __pyx_f_7questdb_7_client__dataframe_columnar_append_field(__pyx_v_chunk, __pyx_v_col, __pyx_v_prebuilt, __pyx_v_row_offset, __pyx_v_row_count); if (unlikely(__pyx_t_6 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7174, __pyx_L1_error)
 07175:                 chunk, col, prebuilt, row_offset, row_count)
+07176:             field_count += 1
      __pyx_v_field_count = (__pyx_v_field_count + 1);
+07177:         elif col.setup.target != col_target_t.col_target_skip:
    __pyx_t_5 = (__pyx_v_col->setup->target != __pyx_e_7questdb_7_client_col_target_skip);
    if (unlikely(__pyx_t_5)) {
/* … */
    }
    __pyx_L5:;
  }
+07178:             raise RuntimeError(
      __pyx_t_8 = NULL;
 07179:                 'Unsupported columnar field target: %d.'
+07180:                 % <int>col.setup.target)
      __pyx_t_9 = __Pyx_PyLong_From_int(((int)__pyx_v_col->setup->target)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7180, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Unsupported_columnar_field_targe_2, __pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 7180, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_11 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_10};
        __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7178, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
      }
      __Pyx_Raise(__pyx_t_7, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __PYX_ERR(0, 7178, __pyx_L1_error)
 07181: 
+07182:     if field_count == 0:
  __pyx_t_5 = (__pyx_v_field_count == 0);
  if (unlikely(__pyx_t_5)) {
/* … */
  }
+07183:         raise RuntimeError(
    __pyx_t_10 = NULL;
    __pyx_t_1 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_mstate_global->__pyx_kp_u_Validated_columnar_plan_has_no_n};
      __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_1, (2-__pyx_t_1) | (__pyx_t_1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7183, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
    }
    __Pyx_Raise(__pyx_t_7, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_ERR(0, 7183, __pyx_L1_error)
 07184:             'Validated columnar plan has no non-timestamp data columns.')
+07185:     if plan.at_value == _AT_IS_SERVER_NOW:
  __pyx_t_5 = (__pyx_v_plan->at_value == __pyx_v_7questdb_7_client__AT_IS_SERVER_NOW);
  if (__pyx_t_5) {
/* … */
  }
 07186:         # Explicit `at=ServerTimestamp` opt-in: the frame carries no
 07187:         # designated timestamp column; the server stamps rows on arrival.
+07188:         if not qwp_chunk_at_now(chunk, &err):
    __pyx_t_5 = (!qwp_chunk_at_now(__pyx_v_chunk, (&__pyx_v_err)));
    if (unlikely(__pyx_t_5)) {
/* … */
    }
+07189:             raise c_err_to_py(err)
      __pyx_t_7 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7189, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_Raise(__pyx_t_7, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __PYX_ERR(0, 7189, __pyx_L1_error)
+07190:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
+07191:     if plan.at_value >= 0:
  __pyx_t_5 = (__pyx_v_plan->at_value >= 0);
  if (__pyx_t_5) {
/* … */
  }
 07192:         # Fixed scalar designated timestamp shared by every row.
+07193:         if not qwp_chunk_at_scalar_nanos(
    __pyx_t_5 = (!qwp_chunk_at_scalar_nanos(__pyx_v_chunk, __pyx_v_plan->at_value, (&__pyx_v_err)));
    if (unlikely(__pyx_t_5)) {
/* … */
    }
 07194:                 chunk, plan.at_value, &err):
+07195:             raise c_err_to_py(err)
      __pyx_t_7 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7195, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_Raise(__pyx_t_7, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __PYX_ERR(0, 7195, __pyx_L1_error)
+07196:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
+07197:     if at_col == NULL:
  __pyx_t_5 = (__pyx_v_at_col == NULL);
  if (unlikely(__pyx_t_5)) {
/* … */
  }
+07198:         raise RuntimeError('Validated columnar plan has no timestamp column.')
    __pyx_t_10 = NULL;
    __pyx_t_1 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_mstate_global->__pyx_kp_u_Validated_columnar_plan_has_no_t};
      __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_1, (2-__pyx_t_1) | (__pyx_t_1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7198, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
    }
    __Pyx_Raise(__pyx_t_7, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_ERR(0, 7198, __pyx_L1_error)
+07199:     if plan.pyobj_built != NULL:
  __pyx_t_5 = (__pyx_v_plan->pyobj_built != NULL);
  if (__pyx_t_5) {
/* … */
  }
+07200:         at_prebuilt = plan.pyobj_built[at_col_index]
    __pyx_v_at_prebuilt = (__pyx_v_plan->pyobj_built[__pyx_v_at_col_index]);
+07201:     _dataframe_columnar_append_at(
  __pyx_t_6 = __pyx_f_7questdb_7_client__dataframe_columnar_append_at(__pyx_v_chunk, __pyx_v_at_col, __pyx_v_at_prebuilt, __pyx_v_row_offset, __pyx_v_row_count); if (unlikely(__pyx_t_6 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7201, __pyx_L1_error)
 07202:         chunk, at_col, at_prebuilt, row_offset, row_count)
 07203: 
 07204: 
+07205: cdef void_int _dataframe_columnar_sync(qwp_direct_sender* conn) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_sync(struct qwp_direct_sender *__pyx_v_conn) {
  struct line_sender_error *__pyx_v_err;
  int __pyx_v_ok;
  PyThreadState *__pyx_v_gs;
  uint64_t __pyx_v_start_ns;
  __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_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("questdb._client._dataframe_columnar_sync", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+07206:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+07207:     cdef bint ok = False
  __pyx_v_ok = 0;
+07208:     cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+07209:     cdef uint64_t start_ns = 0
  __pyx_v_start_ns = 0;
 07210:     global _dataframe_columnar_sync_calls
 07211:     global _dataframe_columnar_sync_ns
+07212:     if _dataframe_columnar_count_io_stats:
  if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
  }
+07213:         start_ns = time.perf_counter_ns()
    __pyx_t_2 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7213, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_perf_counter_ns); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7213, __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(0, 7213, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __pyx_t_6 = __Pyx_PyLong_As_uint64_t(__pyx_t_1); if (unlikely((__pyx_t_6 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 7213, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_start_ns = __pyx_t_6;
+07214:     _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+07215:     ok = qwp_direct_sender_commit(
  __pyx_v_ok = qwp_direct_sender_commit(__pyx_v_conn, qwpws_ack_level_ok, (&__pyx_v_err));
 07216:         conn,
 07217:         qwpws_ack_level.qwpws_ack_level_ok,
 07218:         &err)
+07219:     _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+07220:     if _dataframe_columnar_count_io_stats:
  if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
  }
+07221:         _dataframe_columnar_sync_calls += 1
    __pyx_v_7questdb_7_client__dataframe_columnar_sync_calls = (__pyx_v_7questdb_7_client__dataframe_columnar_sync_calls + 1);
+07222:         _dataframe_columnar_sync_ns += time.perf_counter_ns() - start_ns
    __pyx_t_1 = __Pyx_PyLong_From_uint64_t(__pyx_v_7questdb_7_client__dataframe_columnar_sync_ns); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7222, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7222, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_perf_counter_ns); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7222, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_5 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7);
      assert(__pyx_t_2);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
      __pyx_t_5 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __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_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7222, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __pyx_t_7 = __Pyx_PyLong_From_uint64_t(__pyx_v_start_ns); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7222, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_2 = PyNumber_Subtract(__pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7222, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = PyNumber_InPlaceAdd(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7222, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_6 = __Pyx_PyLong_As_uint64_t(__pyx_t_7); if (unlikely((__pyx_t_6 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 7222, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_v_7questdb_7_client__dataframe_columnar_sync_ns = __pyx_t_6;
+07223:     if not ok:
  __pyx_t_8 = (!__pyx_v_ok);
  if (unlikely(__pyx_t_8)) {
/* … */
  }
+07224:         raise c_err_to_py(err)
    __pyx_t_7 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7224, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_Raise(__pyx_t_7, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_ERR(0, 7224, __pyx_L1_error)
 07225: 
 07226: 
+07227: cdef bint _dataframe_columnar_force_drop_after_error(
static int __pyx_f_7questdb_7_client__dataframe_columnar_force_drop_after_error(struct qwp_direct_sender *__pyx_v_conn, int __pyx_v_flushed) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 07228:         qwp_direct_sender* conn,
 07229:         bint flushed) noexcept:
 07230:     # A failed call keeps the frames it pipelined after its last commit out
 07231:     # of the table. Batches up to its last commit -- the first flush on a
 07232:     # fresh connection commits on its own, and so does each checkpoint --
 07233:     # may already be in the table, and the caller hears so through
 07234:     # `in_doubt`. The direct pool's return path best-effort-commits
 07235:     # pipelined frames, so a connection that saw any flush is dropped
 07236:     # (discarding the uncommitted frames) instead of returned. When no
 07237:     # flush succeeded there is nothing pipelined and the connection can be
 07238:     # returned normally: the FFI return path itself closes (rather than
 07239:     # recycles) a conn that recorded a terminal transport or protocol
 07240:     # error.
+07241:     if conn == NULL:
  __pyx_t_1 = (__pyx_v_conn == NULL);
  if (__pyx_t_1) {
/* … */
  }
+07242:         return False
    __pyx_r = 0;
    goto __pyx_L0;
+07243:     return flushed
  __pyx_r = __pyx_v_flushed;
  goto __pyx_L0;
 07244: 
 07245: 
+07246: cdef bint _dataframe_columnar_is_deferred_capacity_error(
static int __pyx_f_7questdb_7_client__dataframe_columnar_is_deferred_capacity_error(struct line_sender_error *__pyx_v_err) {
  size_t __pyx_v_msg_len;
  char const *__pyx_v_msg;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 07247:         line_sender_error* err) noexcept:
+07248:     cdef size_t msg_len = 0
  __pyx_v_msg_len = 0;
+07249:     cdef const char* msg = line_sender_error_msg(err, &msg_len)
  __pyx_v_msg = line_sender_error_msg(__pyx_v_err, (&__pyx_v_msg_len));
+07250:     if msg_len < 47:
  __pyx_t_1 = (__pyx_v_msg_len < 47);
  if (__pyx_t_1) {
/* … */
  }
+07251:         return False
    __pyx_r = 0;
    goto __pyx_L0;
+07252:     return strncmp(
  __pyx_r = (strncmp(__pyx_v_msg, __pyx_k_column_sender_deferred_flush_cap, 47) == 0);
  goto __pyx_L0;
 07253:         msg,
 07254:         "column sender deferred flush capacity exhausted",
 07255:         47) == 0
 07256: 
 07257: 
+07258: cdef void_int _dataframe_columnar_flush(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_columnar_flush(struct qwp_direct_sender *__pyx_v_conn, struct qwp_chunk *__pyx_v_chunk, int __pyx_v_retry_after_sync, int *__pyx_v_may_have_committed_prefix) {
  struct line_sender_error *__pyx_v_err;
  enum line_sender_error_code __pyx_v_err_code;
  int __pyx_v_ok;
  PyThreadState *__pyx_v_gs;
  uint64_t __pyx_v_start_ns;
  __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_7);
  __Pyx_AddTraceback("questdb._client._dataframe_columnar_flush", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 07259:         qwp_direct_sender* conn,
 07260:         qwp_chunk* chunk,
 07261:         bint retry_after_sync,
 07262:         bint* may_have_committed_prefix) except -1:
+07263:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 07264:     cdef line_sender_error_code err_code
+07265:     cdef bint ok = False
  __pyx_v_ok = 0;
+07266:     cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+07267:     cdef uint64_t start_ns = 0
  __pyx_v_start_ns = 0;
 07268:     global _dataframe_columnar_flush_calls
 07269:     global _dataframe_columnar_flush_ns
 07270:     global _dataframe_columnar_flush_retry_syncs
 07271: 
+07272:     if _dataframe_columnar_count_io_stats:
  if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
  }
+07273:         start_ns = time.perf_counter_ns()
    __pyx_t_2 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7273, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_perf_counter_ns); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7273, __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(0, 7273, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __pyx_t_6 = __Pyx_PyLong_As_uint64_t(__pyx_t_1); if (unlikely((__pyx_t_6 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 7273, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_start_ns = __pyx_t_6;
+07274:     _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+07275:     ok = qwp_direct_sender_flush(conn, chunk, &err)
  __pyx_v_ok = qwp_direct_sender_flush(__pyx_v_conn, __pyx_v_chunk, (&__pyx_v_err));
+07276:     _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+07277:     if _dataframe_columnar_count_io_stats:
  if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
  }
+07278:         _dataframe_columnar_flush_calls += 1
    __pyx_v_7questdb_7_client__dataframe_columnar_flush_calls = (__pyx_v_7questdb_7_client__dataframe_columnar_flush_calls + 1);
+07279:         _dataframe_columnar_flush_ns += time.perf_counter_ns() - start_ns
    __pyx_t_1 = __Pyx_PyLong_From_uint64_t(__pyx_v_7questdb_7_client__dataframe_columnar_flush_ns); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7279, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7279, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_perf_counter_ns); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7279, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_5 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7);
      assert(__pyx_t_2);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
      __pyx_t_5 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __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_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7279, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __pyx_t_7 = __Pyx_PyLong_From_uint64_t(__pyx_v_start_ns); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7279, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_2 = PyNumber_Subtract(__pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7279, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = PyNumber_InPlaceAdd(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7279, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_6 = __Pyx_PyLong_As_uint64_t(__pyx_t_7); if (unlikely((__pyx_t_6 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 7279, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_v_7questdb_7_client__dataframe_columnar_flush_ns = __pyx_t_6;
+07280:     if ok:
  if (__pyx_v_ok) {
/* … */
  }
+07281:         may_have_committed_prefix[0] = True
    (__pyx_v_may_have_committed_prefix[0]) = 1;
+07282:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
 07283: 
+07284:     err_code = line_sender_error_get_code(err)
  __pyx_v_err_code = line_sender_error_get_code(__pyx_v_err);
+07285:     if (retry_after_sync and err_code == line_sender_error_invalid_api_call and
  if (__pyx_v_retry_after_sync) {
  } else {
    __pyx_t_8 = __pyx_v_retry_after_sync;
    goto __pyx_L7_bool_binop_done;
  }
  __pyx_t_9 = (__pyx_v_err_code == line_sender_error_invalid_api_call);
  if (__pyx_t_9) {
  } else {
    __pyx_t_8 = __pyx_t_9;
    goto __pyx_L7_bool_binop_done;
  }
/* … */
  if (__pyx_t_8) {
/* … */
  }
+07286:             _dataframe_columnar_is_deferred_capacity_error(err)):
  __pyx_t_9 = __pyx_f_7questdb_7_client__dataframe_columnar_is_deferred_capacity_error(__pyx_v_err);
  __pyx_t_8 = __pyx_t_9;
  __pyx_L7_bool_binop_done:;
+07287:         if _dataframe_columnar_count_io_stats:
    if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
    }
+07288:             _dataframe_columnar_flush_retry_syncs += 1
      __pyx_v_7questdb_7_client__dataframe_columnar_flush_retry_syncs = (__pyx_v_7questdb_7_client__dataframe_columnar_flush_retry_syncs + 1);
+07289:         line_sender_error_free(err)
    line_sender_error_free(__pyx_v_err);
+07290:         err = NULL
    __pyx_v_err = NULL;
+07291:         _dataframe_columnar_sync(conn)
    __pyx_t_10 = __pyx_f_7questdb_7_client__dataframe_columnar_sync(__pyx_v_conn); if (unlikely(__pyx_t_10 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7291, __pyx_L1_error)
+07292:         may_have_committed_prefix[0] = True
    (__pyx_v_may_have_committed_prefix[0]) = 1;
+07293:         if _dataframe_columnar_count_io_stats:
    if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
    }
+07294:             start_ns = time.perf_counter_ns()
      __pyx_t_2 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7294, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_perf_counter_ns); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7294, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 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_7 = __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_7)) __PYX_ERR(0, 7294, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
      }
      __pyx_t_6 = __Pyx_PyLong_As_uint64_t(__pyx_t_7); if (unlikely((__pyx_t_6 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 7294, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_v_start_ns = __pyx_t_6;
+07295:         _ensure_doesnt_have_gil(&gs)
    (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+07296:         ok = qwp_direct_sender_flush(conn, chunk, &err)
    __pyx_v_ok = qwp_direct_sender_flush(__pyx_v_conn, __pyx_v_chunk, (&__pyx_v_err));
+07297:         _ensure_has_gil(&gs)
    __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+07298:         if _dataframe_columnar_count_io_stats:
    if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
    }
+07299:             _dataframe_columnar_flush_calls += 1
      __pyx_v_7questdb_7_client__dataframe_columnar_flush_calls = (__pyx_v_7questdb_7_client__dataframe_columnar_flush_calls + 1);
+07300:             _dataframe_columnar_flush_ns += time.perf_counter_ns() - start_ns
      __pyx_t_7 = __Pyx_PyLong_From_uint64_t(__pyx_v_7questdb_7_client__dataframe_columnar_flush_ns); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7300, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_2 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7300, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_perf_counter_ns); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7300, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_5 = 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_5 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
        __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __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_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7300, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      __pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_v_start_ns); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7300, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = PyNumber_Subtract(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7300, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_t_7, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7300, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_6 = __Pyx_PyLong_As_uint64_t(__pyx_t_3); if (unlikely((__pyx_t_6 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 7300, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_v_7questdb_7_client__dataframe_columnar_flush_ns = __pyx_t_6;
+07301:         if ok:
    if (__pyx_v_ok) {
/* … */
    }
+07302:             may_have_committed_prefix[0] = True
      (__pyx_v_may_have_committed_prefix[0]) = 1;
+07303:             return 0
      __pyx_r = 0;
      goto __pyx_L0;
 07304: 
+07305:     raise c_err_to_py(err)
  __pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7305, __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(0, 7305, __pyx_L1_error)
 07306: 
 07307: 
+07308: cdef int _arrow_flush_once(
static int __pyx_f_7questdb_7_client__arrow_flush_once(struct qwp_direct_sender *__pyx_v_conn, struct line_sender_table_name __pyx_v_table, struct ArrowArray *__pyx_v_array, struct ArrowSchema *__pyx_v_schema, struct line_sender_column_name *__pyx_v_ts_column, int __pyx_v_at_scalar_set, int64_t __pyx_v_at_scalar_nanos, struct qwp_arrow_override const *__pyx_v_overrides, size_t __pyx_v_overrides_len, struct line_sender_error **__pyx_v_err) {
  int __pyx_v_ok;
  PyThreadState *__pyx_v_gs;
  uint64_t __pyx_v_start_ns;
  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_8);
  __Pyx_AddTraceback("questdb._client._arrow_flush_once", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 07309:         qwp_direct_sender* conn,
 07310:         line_sender_table_name table,
 07311:         ArrowArray* array,
 07312:         ArrowSchema* schema,
 07313:         line_sender_column_name* ts_column,
 07314:         bint at_scalar_set,
 07315:         int64_t at_scalar_nanos,
 07316:         const qwp_arrow_override* overrides,
 07317:         size_t overrides_len,
 07318:         line_sender_error** err) except -1:
+07319:     cdef bint ok = False
  __pyx_v_ok = 0;
+07320:     cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+07321:     cdef uint64_t start_ns = 0
  __pyx_v_start_ns = 0;
 07322:     global _dataframe_columnar_flush_calls
 07323:     global _dataframe_columnar_flush_ns
 07324: 
+07325:     if _dataframe_columnar_count_io_stats:
  if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
  }
+07326:         start_ns = time.perf_counter_ns()
    __pyx_t_2 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7326, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_perf_counter_ns); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7326, __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(0, 7326, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __pyx_t_6 = __Pyx_PyLong_As_uint64_t(__pyx_t_1); if (unlikely((__pyx_t_6 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 7326, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_start_ns = __pyx_t_6;
+07327:     _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+07328:     if ts_column != NULL:
  __pyx_t_7 = (__pyx_v_ts_column != NULL);
  if (__pyx_t_7) {
/* … */
    goto __pyx_L4;
  }
+07329:         ok = qwp_direct_sender_flush_arrow_batch_at_column(
    __pyx_v_ok = qwp_direct_sender_flush_arrow_batch_at_column(__pyx_v_conn, __pyx_v_table, __pyx_v_array, __pyx_v_schema, (__pyx_v_ts_column[0]), __pyx_v_overrides, __pyx_v_overrides_len, __pyx_v_err);
 07330:             conn, table, array, schema, ts_column[0],
 07331:             overrides, overrides_len, err)
+07332:     elif at_scalar_set:
  if (__pyx_v_at_scalar_set) {
/* … */
    goto __pyx_L4;
  }
+07333:         ok = qwp_direct_sender_flush_arrow_batch_at_scalar_nanos(
    __pyx_v_ok = qwp_direct_sender_flush_arrow_batch_at_scalar_nanos(__pyx_v_conn, __pyx_v_table, __pyx_v_array, __pyx_v_schema, __pyx_v_at_scalar_nanos, __pyx_v_overrides, __pyx_v_overrides_len, __pyx_v_err);
 07334:             conn, table, array, schema, at_scalar_nanos,
 07335:             overrides, overrides_len, err)
 07336:     else:
+07337:         ok = qwp_direct_sender_flush_arrow_batch_at_now(
  /*else*/ {
/* … */
    __pyx_v_ok = qwp_direct_sender_flush_arrow_batch_at_now(__pyx_v_conn, __pyx_v_table, __pyx_v_array, __pyx_v_schema, __pyx_v_overrides, __pyx_v_overrides_len, __pyx_v_err);
  }
  __pyx_L4:;
 07338:             conn, table, array, schema,
 07339:             overrides, overrides_len, err)
+07340:     _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+07341:     if _dataframe_columnar_count_io_stats:
  if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
  }
+07342:         _dataframe_columnar_flush_calls += 1
    __pyx_v_7questdb_7_client__dataframe_columnar_flush_calls = (__pyx_v_7questdb_7_client__dataframe_columnar_flush_calls + 1);
+07343:         _dataframe_columnar_flush_ns += time.perf_counter_ns() - start_ns
    __pyx_t_1 = __Pyx_PyLong_From_uint64_t(__pyx_v_7questdb_7_client__dataframe_columnar_flush_ns); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7343, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7343, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_perf_counter_ns); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7343, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_5 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(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_5 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_2, 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_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7343, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __pyx_t_8 = __Pyx_PyLong_From_uint64_t(__pyx_v_start_ns); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7343, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_2 = PyNumber_Subtract(__pyx_t_4, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7343, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = PyNumber_InPlaceAdd(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7343, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_6 = __Pyx_PyLong_As_uint64_t(__pyx_t_8); if (unlikely((__pyx_t_6 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 7343, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_v_7questdb_7_client__dataframe_columnar_flush_ns = __pyx_t_6;
+07344:     return 1 if ok else 0
  if (__pyx_v_ok) {
    __pyx_t_9 = 1;
  } else {
    __pyx_t_9 = 0;
  }
  __pyx_r = __pyx_t_9;
  goto __pyx_L0;
 07345: 
 07346: 
+07347: cdef void_int _dataframe_arrow_flush_batch(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_arrow_flush_batch(struct qwp_direct_sender *__pyx_v_conn, struct line_sender_table_name __pyx_v_table, struct ArrowArray *__pyx_v_array, struct ArrowSchema *__pyx_v_schema, struct line_sender_column_name *__pyx_v_ts_column, int __pyx_v_at_scalar_set, int64_t __pyx_v_at_scalar_nanos, struct qwp_arrow_override const *__pyx_v_overrides, size_t __pyx_v_overrides_len, int __pyx_v_retry_after_sync, int *__pyx_v_may_have_committed_prefix, size_t *__pyx_v_deferred_since_sync) {
  struct line_sender_error *__pyx_v_err;
  __pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb._client._dataframe_arrow_flush_batch", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 07348:         qwp_direct_sender* conn,
 07349:         line_sender_table_name table,
 07350:         ArrowArray* array,
 07351:         ArrowSchema* schema,
 07352:         line_sender_column_name* ts_column,
 07353:         bint at_scalar_set,
 07354:         int64_t at_scalar_nanos,
 07355:         const qwp_arrow_override* overrides,
 07356:         size_t overrides_len,
 07357:         bint retry_after_sync,
 07358:         bint* may_have_committed_prefix,
 07359:         size_t* deferred_since_sync) except -1:
+07360:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 07361:     global _dataframe_columnar_flush_retry_syncs
 07362: 
+07363:     if _arrow_flush_once(
  __pyx_t_1 = __pyx_f_7questdb_7_client__arrow_flush_once(__pyx_v_conn, __pyx_v_table, __pyx_v_array, __pyx_v_schema, __pyx_v_ts_column, __pyx_v_at_scalar_set, __pyx_v_at_scalar_nanos, __pyx_v_overrides, __pyx_v_overrides_len, (&__pyx_v_err)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 7363, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
  }
 07364:             conn, table, array, schema, ts_column,
 07365:             at_scalar_set, at_scalar_nanos,
 07366:             overrides, overrides_len, &err):
+07367:         may_have_committed_prefix[0] = True
    (__pyx_v_may_have_committed_prefix[0]) = 1;
+07368:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
 07369: 
 07370:     # A batch larger than the server per-batch cap is split into several
 07371:     # deferred frames, so the caller's batch counter can undercount the
 07372:     # 127-slot in-flight window; commit to drain it and retry once. The
 07373:     # failed frame itself never hit the wire (`array` was re-exported;
 07374:     # `release` must still be set for the retry to be safe). The native split
 07375:     # path never exposes a retryable error after committing an internal prefix;
 07376:     # this explicit sync nevertheless makes the higher-level source prefix
 07377:     # sticky before the failed batch is retried.
+07378:     if (retry_after_sync
  if (__pyx_v_retry_after_sync) {
  } else {
    __pyx_t_2 = __pyx_v_retry_after_sync;
    goto __pyx_L5_bool_binop_done;
  }
/* … */
  if (__pyx_t_2) {
/* … */
  }
+07379:             and line_sender_error_get_code(err) ==
  __pyx_t_3 = (line_sender_error_get_code(__pyx_v_err) == line_sender_error_invalid_api_call);
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L5_bool_binop_done;
  }
 07380:                 line_sender_error_invalid_api_call
+07381:             and _dataframe_columnar_is_deferred_capacity_error(err)
  __pyx_t_3 = __pyx_f_7questdb_7_client__dataframe_columnar_is_deferred_capacity_error(__pyx_v_err);
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L5_bool_binop_done;
  }
+07382:             and array.release != NULL):
  __pyx_t_3 = (__pyx_v_array->release != NULL);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L5_bool_binop_done:;
+07383:         if _dataframe_columnar_count_io_stats:
    if (__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats) {
/* … */
    }
+07384:             _dataframe_columnar_flush_retry_syncs += 1
      __pyx_v_7questdb_7_client__dataframe_columnar_flush_retry_syncs = (__pyx_v_7questdb_7_client__dataframe_columnar_flush_retry_syncs + 1);
+07385:         line_sender_error_free(err)
    line_sender_error_free(__pyx_v_err);
+07386:         err = NULL
    __pyx_v_err = NULL;
+07387:         _dataframe_columnar_sync(conn)
    __pyx_t_4 = __pyx_f_7questdb_7_client__dataframe_columnar_sync(__pyx_v_conn); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7387, __pyx_L1_error)
+07388:         may_have_committed_prefix[0] = True
    (__pyx_v_may_have_committed_prefix[0]) = 1;
+07389:         deferred_since_sync[0] = 0
    (__pyx_v_deferred_since_sync[0]) = 0;
+07390:         if _arrow_flush_once(
    __pyx_t_1 = __pyx_f_7questdb_7_client__arrow_flush_once(__pyx_v_conn, __pyx_v_table, __pyx_v_array, __pyx_v_schema, __pyx_v_ts_column, __pyx_v_at_scalar_set, __pyx_v_at_scalar_nanos, __pyx_v_overrides, __pyx_v_overrides_len, (&__pyx_v_err)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 7390, __pyx_L1_error)
    __pyx_t_2 = (__pyx_t_1 != 0);
    if (__pyx_t_2) {
/* … */
    }
 07391:                 conn, table, array, schema, ts_column,
 07392:                 at_scalar_set, at_scalar_nanos,
 07393:                 overrides, overrides_len, &err):
+07394:             may_have_committed_prefix[0] = True
      (__pyx_v_may_have_committed_prefix[0]) = 1;
+07395:             return 0
      __pyx_r = 0;
      goto __pyx_L0;
 07396: 
+07397:     raise c_err_to_py(err)
  __pyx_t_5 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7397, __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(0, 7397, __pyx_L1_error)
 07398: 
 07399: 
+07400: def _debug_dataframe_columnar_io_stats(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_109_debug_dataframe_columnar_io_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_108_debug_dataframe_columnar_io_stats, "\n    Internal benchmark hook for columnar flush/sync timing.\n    ");
static PyMethodDef __pyx_mdef_7questdb_7_client_109_debug_dataframe_columnar_io_stats = {"_debug_dataframe_columnar_io_stats", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_109_debug_dataframe_columnar_io_stats, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_108_debug_dataframe_columnar_io_stats};
static PyObject *__pyx_pw_7questdb_7_client_109_debug_dataframe_columnar_io_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_enabled = 0;
  int __pyx_v_reset;
  #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_dataframe_columnar_io_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_enabled,&__pyx_mstate_global->__pyx_n_u_reset,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(0, 7400, __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(0, 7400, __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(0, 7400, __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_dataframe_columnar_io_stats", 0) < (0)) __PYX_ERR(0, 7400, __pyx_L3_error)
/* … */
  /* 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_108_debug_dataframe_columnar_io_stats(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_enabled, int __pyx_v_reset) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._debug_dataframe_columnar_io_stats", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = PyTuple_Pack(2, Py_None, __pyx_t_25); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 7400, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_109_debug_dataframe_columnar_io_stats, 0, __pyx_mstate_global->__pyx_n_u_debug_dataframe_columnar_io_sta, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[203])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 7400, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_25, __pyx_t_17);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_dataframe_columnar_io_sta, __pyx_t_25) < (0)) __PYX_ERR(0, 7400, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
+07401:         object enabled=None,
      if (!values[0]) values[0] = __Pyx_NewRef(((PyObject *)Py_None));
    } else {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 7400, __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(0, 7400, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[0]) values[0] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_enabled = values[0];
    if (values[1]) {
      __pyx_v_reset = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_reset == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 7402, __pyx_L3_error)
    } else {
+07402:         bint reset=False):
      __pyx_v_reset = ((int)((int)0));
    }
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_debug_dataframe_columnar_io_stats", 0, 0, 2, __pyx_nargs); __PYX_ERR(0, 7400, __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_dataframe_columnar_io_stats", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_108_debug_dataframe_columnar_io_stats(__pyx_self, __pyx_v_enabled, __pyx_v_reset);
/* … */
  __pyx_t_25 = __Pyx_PyBool_FromLong(((int)0)); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 7402, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
 07403:     """
 07404:     Internal benchmark hook for columnar flush/sync timing.
 07405:     """
 07406:     global _dataframe_columnar_count_io_stats
 07407:     global _dataframe_columnar_flush_calls
 07408:     global _dataframe_columnar_flush_ns
 07409:     global _dataframe_columnar_sync_calls
 07410:     global _dataframe_columnar_sync_ns
 07411:     global _dataframe_columnar_flush_retry_syncs
 07412: 
+07413:     if reset:
  if (__pyx_v_reset) {
/* … */
  }
+07414:         _dataframe_columnar_flush_calls = 0
    __pyx_v_7questdb_7_client__dataframe_columnar_flush_calls = 0;
+07415:         _dataframe_columnar_flush_ns = 0
    __pyx_v_7questdb_7_client__dataframe_columnar_flush_ns = 0;
+07416:         _dataframe_columnar_sync_calls = 0
    __pyx_v_7questdb_7_client__dataframe_columnar_sync_calls = 0;
+07417:         _dataframe_columnar_sync_ns = 0
    __pyx_v_7questdb_7_client__dataframe_columnar_sync_ns = 0;
+07418:         _dataframe_columnar_flush_retry_syncs = 0
    __pyx_v_7questdb_7_client__dataframe_columnar_flush_retry_syncs = 0;
+07419:     if enabled is not None:
  __pyx_t_1 = (__pyx_v_enabled != Py_None);
  if (__pyx_t_1) {
/* … */
  }
+07420:         _dataframe_columnar_count_io_stats = bool(enabled)
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_enabled};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __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(0, 7420, __pyx_L1_error)
      __Pyx_GOTREF((PyObject *)__pyx_t_2);
    }
    __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_t_2)); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 7420, __pyx_L1_error)
    __Pyx_DECREF((PyObject *)__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats = __pyx_t_1;
+07421:     return {
  __Pyx_XDECREF(__pyx_r);
+07422:         'enabled': _dataframe_columnar_count_io_stats,
  __pyx_t_2 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7422, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_v_7questdb_7_client__dataframe_columnar_count_io_stats); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7422, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_enabled, __pyx_t_3) < (0)) __PYX_ERR(0, 7422, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07423:         'flush_calls': _dataframe_columnar_flush_calls,
  __pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_v_7questdb_7_client__dataframe_columnar_flush_calls); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7423, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_flush_calls, __pyx_t_3) < (0)) __PYX_ERR(0, 7422, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07424:         'flush_s': _dataframe_columnar_flush_ns / 1_000_000_000.0,
  __pyx_t_3 = PyFloat_FromDouble((((double)__pyx_v_7questdb_7_client__dataframe_columnar_flush_ns) / 1000000000.0)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7424, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_flush_s, __pyx_t_3) < (0)) __PYX_ERR(0, 7422, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07425:         'sync_calls': _dataframe_columnar_sync_calls,
  __pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_v_7questdb_7_client__dataframe_columnar_sync_calls); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7425, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_sync_calls, __pyx_t_3) < (0)) __PYX_ERR(0, 7422, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07426:         'sync_s': _dataframe_columnar_sync_ns / 1_000_000_000.0,
  __pyx_t_3 = PyFloat_FromDouble((((double)__pyx_v_7questdb_7_client__dataframe_columnar_sync_ns) / 1000000000.0)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7426, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_sync_s, __pyx_t_3) < (0)) __PYX_ERR(0, 7422, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07427:         'flush_retry_syncs': _dataframe_columnar_flush_retry_syncs,
  __pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_v_7questdb_7_client__dataframe_columnar_flush_retry_syncs); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7427, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_flush_retry_syncs, __pyx_t_3) < (0)) __PYX_ERR(0, 7422, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 07428:     }
 07429: 
 07430: 
+07431: def _debug_dataframe_columnar_plan(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_111_debug_dataframe_columnar_plan(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_111_debug_dataframe_columnar_plan = {"_debug_dataframe_columnar_plan", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_111_debug_dataframe_columnar_plan, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_111_debug_dataframe_columnar_plan(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_df = 0;
  PyObject *__pyx_v_table_name = 0;
  PyObject *__pyx_v_table_name_col = 0;
  PyObject *__pyx_v_symbols = 0;
  PyObject *__pyx_v_at = 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_dataframe_columnar_plan (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_df_2,&__pyx_mstate_global->__pyx_n_u_table_name,&__pyx_mstate_global->__pyx_n_u_table_name_col,&__pyx_mstate_global->__pyx_n_u_symbols,&__pyx_mstate_global->__pyx_n_u_at,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(0, 7431, __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(0, 7431, __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_dataframe_columnar_plan", 0) < (0)) __PYX_ERR(0, 7431, __pyx_L3_error)
/* … */
  /* 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_110_debug_dataframe_columnar_plan(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_df, PyObject *__pyx_v_table_name, PyObject *__pyx_v_table_name_col, PyObject *__pyx_v_symbols, PyObject *__pyx_v_at) {
  struct qdb_pystr_buf *__pyx_v_b;
  struct __pyx_t_7questdb_7_client_dataframe_plan_t __pyx_v_plan;
  PyObject *__pyx_v_failures = 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_AddTraceback("questdb._client._debug_dataframe_columnar_plan", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_failures);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_25 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 7431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
/* … */
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_111_debug_dataframe_columnar_plan, 0, __pyx_mstate_global->__pyx_n_u_debug_dataframe_columnar_plan, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[204])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 7431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_17, __pyx_t_25);
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_dataframe_columnar_plan, __pyx_t_17) < (0)) __PYX_ERR(0, 7431, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 07432:         object df,
 07433:         *,
+07434:         object table_name=None,
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_table_name, Py_None) < (0)) __PYX_ERR(0, 7431, __pyx_L1_error)
+07435:         object table_name_col=None,
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)((PyObject*)__pyx_mstate_global->__pyx_n_u_auto)));
/* … */
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)((PyObject*)__pyx_mstate_global->__pyx_n_u_auto)));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_table_name_col, Py_None) < (0)) __PYX_ERR(0, 7431, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_symbols, ((PyObject*)__pyx_mstate_global->__pyx_n_u_auto)) < (0)) __PYX_ERR(0, 7431, __pyx_L1_error)
 07436:         object symbols='auto',
+07437:         object at=None):
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_dataframe_columnar_plan", 1, 1, 1, i); __PYX_ERR(0, 7431, __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(0, 7431, __pyx_L3_error)
/* … */
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_df = values[0];
    __pyx_v_table_name = values[1];
    __pyx_v_table_name_col = values[2];
    __pyx_v_symbols = values[3];
    __pyx_v_at = values[4];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_debug_dataframe_columnar_plan", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 7431, __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_dataframe_columnar_plan", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_110_debug_dataframe_columnar_plan(__pyx_self, __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at);
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_at, Py_None) < (0)) __PYX_ERR(0, 7431, __pyx_L1_error)
+07438:     cdef qdb_pystr_buf* b = qdb_pystr_buf_new()
  __pyx_v_b = qdb_pystr_buf_new();
+07439:     cdef dataframe_plan_t plan = dataframe_plan_blank()
  __pyx_v_plan = __pyx_f_7questdb_7_client_dataframe_plan_blank();
 07440:     cdef object failures
+07441:     try:
  /*try:*/ {
+07442:         _dataframe_plan_build(
    __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_plan_build(__pyx_v_b, __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at, (&__pyx_v_plan), ((PyObject*)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7442, __pyx_L4_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 07443:             b,
 07444:             df,
 07445:             table_name,
 07446:             table_name_col,
 07447:             symbols,
 07448:             at,
 07449:             &plan,
+07450:             _FIELD_TARGETS_QWP)
    __pyx_t_1 = __pyx_v_7questdb_7_client__FIELD_TARGETS_QWP;
    __Pyx_INCREF(__pyx_t_1);
+07451:         _dataframe_columnar_promote_cols(df, &plan)
    __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_promote_cols(__pyx_v_df, (&__pyx_v_plan)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7451, __pyx_L4_error)
+07452:         failures = _dataframe_columnar_plan_failures(df, &plan)
    __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_columnar_plan_failures(__pyx_v_df, (&__pyx_v_plan)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7452, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_failures = __pyx_t_1;
    __pyx_t_1 = 0;
+07453:         return {
    __Pyx_XDECREF(__pyx_r);
+07454:             'supported': not bool(failures),
    __pyx_t_1 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7454, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = NULL;
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_failures};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __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(0, 7454, __pyx_L4_error)
      __Pyx_GOTREF((PyObject *)__pyx_t_3);
    }
    __pyx_t_6 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_t_3)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 7454, __pyx_L4_error)
    __Pyx_DECREF((PyObject *)__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyBool_FromLong((!__pyx_t_6)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7454, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_supported, __pyx_t_3) < (0)) __PYX_ERR(0, 7454, __pyx_L4_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07455:             'failures': failures,
    if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_failures, __pyx_v_failures) < (0)) __PYX_ERR(0, 7454, __pyx_L4_error)
+07456:             'normalizations': _dataframe_columnar_plan_normalizations(
    __pyx_t_3 = __pyx_f_7questdb_7_client__dataframe_columnar_plan_normalizations(__pyx_v_df, (&__pyx_v_plan)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7456, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_normalizations, __pyx_t_3) < (0)) __PYX_ERR(0, 7454, __pyx_L4_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L3_return;
  }
 07457:                 df,
 07458:                 &plan),
 07459:         }
 07460:     finally:
+07461:         dataframe_plan_release(&plan)
  /*finally:*/ {
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 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_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15);
      if ( unlikely(__Pyx_GetException(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12) < 0)) __Pyx_ErrFetch(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_14);
      __Pyx_XGOTREF(__pyx_t_15);
      __pyx_t_7 = __pyx_lineno; __pyx_t_8 = __pyx_clineno; __pyx_t_9 = __pyx_filename;
      {
        __pyx_f_7questdb_7_client_dataframe_plan_release((&__pyx_v_plan));
/* … */
      __pyx_f_7questdb_7_client_dataframe_plan_release((&__pyx_v_plan));
+07462:         qdb_pystr_buf_free(b)
        qdb_pystr_buf_free(__pyx_v_b);
      }
      __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_10);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_ErrRestore(__pyx_t_10, __pyx_t_11, __pyx_t_12);
      __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0;
      __pyx_lineno = __pyx_t_7; __pyx_clineno = __pyx_t_8; __pyx_filename = __pyx_t_9;
      goto __pyx_L1_error;
    }
    __pyx_L3_return: {
      __pyx_t_15 = __pyx_r;
      __pyx_r = 0;
/* … */
      qdb_pystr_buf_free(__pyx_v_b);
      __pyx_r = __pyx_t_15;
      __pyx_t_15 = 0;
      goto __pyx_L0;
    }
  }
 07463: 
 07464: 
+07465: def _bench_dataframe_flush_arrow_batch(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_113_bench_dataframe_flush_arrow_batch(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_112_bench_dataframe_flush_arrow_batch, "\n    Internal benchmark hook for `qwp_direct_sender_flush_arrow_batch_at_now`\n    FFI.\n\n    `arrow_source` must expose the Arrow PyCapsule Interface\n    (`__arrow_c_stream__`) \342\200\224 pa.RecordBatch, pa.Table, pa.RecordBatchReader,\n    pl.DataFrame, or any other Arrow-native container. Pandas frames are\n    not accepted here on purpose: this hook benches the Arrow FFI itself,\n    not pandas\342\206\222Arrow conversion. Use `_bench_dataframe_plan_and_populate_\n    column_chunks` for the pandas chunk-based path. Intentionally kept out\n    of `__all__`.\n    ");
static PyMethodDef __pyx_mdef_7questdb_7_client_113_bench_dataframe_flush_arrow_batch = {"_bench_dataframe_flush_arrow_batch", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_113_bench_dataframe_flush_arrow_batch, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_112_bench_dataframe_flush_arrow_batch};
static PyObject *__pyx_pw_7questdb_7_client_113_bench_dataframe_flush_arrow_batch(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_arrow_source = 0;
  PyObject *__pyx_v_table_name = 0;
  PyObject *__pyx_v_at = 0;
  PyObject *__pyx_v_conf = 0;
  size_t __pyx_v_iterations;
  #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("_bench_dataframe_flush_arrow_batch (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_arrow_source,&__pyx_mstate_global->__pyx_n_u_table_name,&__pyx_mstate_global->__pyx_n_u_at,&__pyx_mstate_global->__pyx_n_u_conf,&__pyx_mstate_global->__pyx_n_u_iterations,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(0, 7465, __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(0, 7465, __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, "_bench_dataframe_flush_arrow_batch", 0) < (0)) __PYX_ERR(0, 7465, __pyx_L3_error)
/* … */
  /* 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_112_bench_dataframe_flush_arrow_batch(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_arrow_source, PyObject *__pyx_v_table_name, PyObject *__pyx_v_at, PyObject *__pyx_v_conf, size_t __pyx_v_iterations) {
  CYTHON_UNUSED size_t __pyx_v_iteration;
  size_t __pyx_v_row_count;
  size_t __pyx_v_col_count;
  size_t __pyx_v_completed;
  struct questdb_db *__pyx_v_db;
  struct qwp_direct_sender *__pyx_v_conn;
  struct line_sender_error *__pyx_v_err;
  struct qdb_pystr_buf *__pyx_v_b;
  PyThreadState *__pyx_v_gs;
  PyObject *__pyx_v_conf_bytes = 0;
  int __pyx_v_any_flushed;
  int __pyx_v_may_have_committed_prefix;
  size_t __pyx_v_deferred_since_sync;
  struct line_sender_table_name __pyx_v_c_table_name;
  struct line_sender_column_name __pyx_v_c_ts_column;
  struct line_sender_column_name *__pyx_v_c_ts_column_ptr;
  struct ArrowSchema __pyx_v_c_schema;
  int __pyx_v_at_is_column;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("questdb._client._bench_dataframe_flush_arrow_batch", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_conf_bytes);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 7465, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
/* … */
  __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_113_bench_dataframe_flush_arrow_batch, 0, __pyx_mstate_global->__pyx_n_u_bench_dataframe_flush_arrow_bat_2, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[205])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 7465, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25);
  #endif
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_25, __pyx_t_17);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_bench_dataframe_flush_arrow_bat_2, __pyx_t_25) < (0)) __PYX_ERR(0, 7465, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 07466:         object arrow_source,
 07467:         *,
+07468:         object table_name=None,
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_table_name, Py_None) < (0)) __PYX_ERR(0, 7465, __pyx_L1_error)
+07469:         object at=None,
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_at, Py_None) < (0)) __PYX_ERR(0, 7465, __pyx_L1_error)
+07470:         object conf=None,
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_bench_dataframe_flush_arrow_batch", 1, 1, 1, i); __PYX_ERR(0, 7465, __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(0, 7465, __pyx_L3_error)
/* … */
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_arrow_source = values[0];
    __pyx_v_table_name = values[1];
    __pyx_v_at = values[2];
    __pyx_v_conf = values[3];
    if (values[4]) {
      __pyx_v_iterations = __Pyx_PyLong_As_size_t(values[4]); if (unlikely((__pyx_v_iterations == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 7471, __pyx_L3_error)
    } else {
      __pyx_v_iterations = ((size_t)((size_t)1));
    }
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_bench_dataframe_flush_arrow_batch", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 7465, __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._bench_dataframe_flush_arrow_batch", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_112_bench_dataframe_flush_arrow_batch(__pyx_self, __pyx_v_arrow_source, __pyx_v_table_name, __pyx_v_at, __pyx_v_conf, __pyx_v_iterations);
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_conf, Py_None) < (0)) __PYX_ERR(0, 7465, __pyx_L1_error)
+07471:         size_t iterations=1):
  __pyx_t_25 = __Pyx_PyLong_FromSize_t(((size_t)1)); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 7471, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_iterations, __pyx_t_25) < (0)) __PYX_ERR(0, 7465, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 07472:     """
 07473:     Internal benchmark hook for `qwp_direct_sender_flush_arrow_batch_at_now`
 07474:     FFI.
 07475: 
 07476:     `arrow_source` must expose the Arrow PyCapsule Interface
 07477:     (`__arrow_c_stream__`) — pa.RecordBatch, pa.Table, pa.RecordBatchReader,
 07478:     pl.DataFrame, or any other Arrow-native container. Pandas frames are
 07479:     not accepted here on purpose: this hook benches the Arrow FFI itself,
 07480:     not pandas→Arrow conversion. Use `_bench_dataframe_plan_and_populate_
 07481:     column_chunks` for the pandas chunk-based path. Intentionally kept out
 07482:     of `__all__`.
 07483:     """
 07484:     cdef size_t iteration
+07485:     cdef size_t row_count = 0
  __pyx_v_row_count = 0;
+07486:     cdef size_t col_count = 0
  __pyx_v_col_count = 0;
+07487:     cdef size_t completed = 0
  __pyx_v_completed = 0;
+07488:     cdef questdb_db* db = NULL
  __pyx_v_db = NULL;
+07489:     cdef qwp_direct_sender* conn = NULL
  __pyx_v_conn = NULL;
+07490:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+07491:     cdef qdb_pystr_buf* b = NULL
  __pyx_v_b = NULL;
+07492:     cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
 07493:     cdef bytes conf_bytes
+07494:     cdef bint any_flushed = False
  __pyx_v_any_flushed = 0;
+07495:     cdef bint may_have_committed_prefix = False
  __pyx_v_may_have_committed_prefix = 0;
+07496:     cdef size_t deferred_since_sync = 0
  __pyx_v_deferred_since_sync = 0;
 07497:     cdef line_sender_table_name c_table_name
 07498:     cdef line_sender_column_name c_ts_column
+07499:     cdef line_sender_column_name* c_ts_column_ptr = NULL
  __pyx_v_c_ts_column_ptr = NULL;
 07500:     cdef ArrowSchema c_schema
+07501:     cdef bint at_is_column = False
  __pyx_v_at_is_column = 0;
 07502: 
+07503:     if iterations == 0:
  __pyx_t_1 = (__pyx_v_iterations == 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+07504:         raise ValueError('iterations must be greater than zero')
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_iterations_must_be_greater_than};
      __pyx_t_2 = __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;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7504, __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(0, 7504, __pyx_L1_error)
+07505:     if conf is None:
  __pyx_t_1 = (__pyx_v_conf == Py_None);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+07506:         raise ValueError('conf is required for flush_arrow_batch bench.')
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_conf_is_required_for_flush_arrow};
      __pyx_t_2 = __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;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7506, __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(0, 7506, __pyx_L1_error)
+07507:     if not hasattr(arrow_source, '__arrow_c_stream__'):
  __pyx_t_1 = __Pyx_HasAttr(__pyx_v_arrow_source, __pyx_mstate_global->__pyx_n_u_arrow_c_stream_2); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 7507, __pyx_L1_error)
  __pyx_t_5 = (!__pyx_t_1);
  if (unlikely(__pyx_t_5)) {
/* … */
  }
+07508:         raise TypeError(
    __pyx_t_3 = NULL;
+07509:             '_bench_dataframe_flush_arrow_batch requires an Arrow-native '
    __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_8, 3, 163 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7));
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7509, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_6};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __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_2)) __PYX_ERR(0, 7508, __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(0, 7508, __pyx_L1_error)
 07510:             'source exposing __arrow_c_stream__ '
 07511:             '(pa.RecordBatch / pa.Table / pl.DataFrame / RecordBatchReader). '
+07512:             f'Got {type(arrow_source).__name__}.')
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_arrow_source)), __pyx_mstate_global->__pyx_n_u_name_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7512, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_t_6, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7512, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_bench_dataframe_flush_arrow_bat;
    __pyx_t_8[1] = __pyx_t_7;
    __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u__2;
+07513:     if not isinstance(table_name, str):
  __pyx_t_5 = PyUnicode_Check(__pyx_v_table_name); 
  __pyx_t_1 = (!__pyx_t_5);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+07514:         raise TypeError(
    __pyx_t_6 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_table_name_must_be_str_for_Arrow};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7514, __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(0, 7514, __pyx_L1_error)
 07515:             'table_name must be str for Arrow-native DataFrame input.')
+07516:     if at is None or isinstance(at, ServerTimestampType):
  __pyx_t_5 = (__pyx_v_at == Py_None);
  if (!__pyx_t_5) {
  } else {
    __pyx_t_1 = __pyx_t_5;
    goto __pyx_L8_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ServerTimestampType); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7516, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = PyObject_IsInstance(__pyx_v_at, __pyx_t_2); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 7516, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_1 = __pyx_t_5;
  __pyx_L8_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
    goto __pyx_L7;
  }
+07517:         at_is_column = False
    __pyx_v_at_is_column = 0;
+07518:     elif isinstance(at, str):
  __pyx_t_1 = PyUnicode_Check(__pyx_v_at); 
  if (likely(__pyx_t_1)) {
/* … */
    goto __pyx_L7;
  }
+07519:         at_is_column = True
    __pyx_v_at_is_column = 1;
 07520:     else:
+07521:         raise TypeError(
  /*else*/ {
    __pyx_t_6 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_at_must_be_a_column_name_str_Ser};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7521, __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(0, 7521, __pyx_L1_error)
  }
  __pyx_L7:;
 07522:             'at must be a column name str, ServerTimestamp, or None '
 07523:             'for Arrow-native DataFrame input.')
 07524: 
+07525:     row_count = int(
  __pyx_t_6 = __Pyx_PyNumber_Int(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7525, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = __Pyx_PyLong_As_size_t(__pyx_t_6); if (unlikely((__pyx_t_4 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 7525, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_v_row_count = __pyx_t_4;
+07526:         getattr(arrow_source, 'num_rows', None)
  __pyx_t_6 = __Pyx_GetAttr3(__pyx_v_arrow_source, __pyx_mstate_global->__pyx_n_u_num_rows, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7526, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 7526, __pyx_L1_error)
  if (!__pyx_t_1) {
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_6);
    __pyx_t_2 = __pyx_t_6;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L10_bool_binop_done;
  }
+07527:         or getattr(arrow_source, 'height', None)
  __pyx_t_6 = __Pyx_GetAttr3(__pyx_v_arrow_source, __pyx_mstate_global->__pyx_n_u_height, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7527, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 7527, __pyx_L1_error)
  if (!__pyx_t_1) {
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_6);
    __pyx_t_2 = __pyx_t_6;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L10_bool_binop_done;
  }
+07528:         or 0)
  __pyx_t_6 = __Pyx_PyLong_From_long(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7528, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_2 = __pyx_t_6;
  __pyx_t_6 = 0;
  __pyx_L10_bool_binop_done:;
+07529:     col_count = int(
  __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7529, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_4 = __Pyx_PyLong_As_size_t(__pyx_t_2); if (unlikely((__pyx_t_4 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 7529, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_col_count = __pyx_t_4;
+07530:         getattr(arrow_source, 'num_columns', None)
  __pyx_t_2 = __Pyx_GetAttr3(__pyx_v_arrow_source, __pyx_mstate_global->__pyx_n_u_num_columns, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7530, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 7530, __pyx_L1_error)
  if (!__pyx_t_1) {
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_6 = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L13_bool_binop_done;
  }
+07531:         or getattr(arrow_source, 'width', None)
  __pyx_t_2 = __Pyx_GetAttr3(__pyx_v_arrow_source, __pyx_mstate_global->__pyx_n_u_width, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7531, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 7531, __pyx_L1_error)
  if (!__pyx_t_1) {
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_6 = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L13_bool_binop_done;
  }
+07532:         or 0)
  __pyx_t_2 = __Pyx_PyLong_From_long(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7532, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = __pyx_t_2;
  __pyx_t_2 = 0;
  __pyx_L13_bool_binop_done:;
 07533: 
+07534:     conf_bytes = conf.encode('utf-8') if isinstance(conf, str) else conf
  __pyx_t_1 = PyUnicode_Check(__pyx_v_conf); 
  if (__pyx_t_1) {
    __pyx_t_3 = __pyx_v_conf;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_utf_8};
      __pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_encode, __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_6)) __PYX_ERR(0, 7534, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
    }
    if (!(likely(PyBytes_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_6))) __PYX_ERR(0, 7534, __pyx_L1_error)
    __pyx_t_2 = __pyx_t_6;
    __pyx_t_6 = 0;
  } else {
    __pyx_t_6 = __pyx_v_conf;
    __Pyx_INCREF(__pyx_t_6);
    if (!(likely(PyBytes_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_6))) __PYX_ERR(0, 7534, __pyx_L1_error)
    __pyx_t_2 = __pyx_t_6;
    __pyx_t_6 = 0;
  }
  __pyx_v_conf_bytes = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+07535:     _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+07536:     db = questdb_db_connect(conf_bytes, len(conf_bytes), &err)
  if (unlikely(__pyx_v_conf_bytes == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
    __PYX_ERR(0, 7536, __pyx_L1_error)
  }
  __pyx_t_9 = __Pyx_PyBytes_AsString(__pyx_v_conf_bytes); if (unlikely((!__pyx_t_9) && PyErr_Occurred())) __PYX_ERR(0, 7536, __pyx_L1_error)
  if (unlikely(__pyx_v_conf_bytes == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(0, 7536, __pyx_L1_error)
  }
  __pyx_t_10 = __Pyx_PyBytes_GET_SIZE(__pyx_v_conf_bytes); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(0, 7536, __pyx_L1_error)
  __pyx_v_db = questdb_db_connect(__pyx_t_9, __pyx_t_10, (&__pyx_v_err));
+07537:     _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+07538:     if db == NULL:
  __pyx_t_1 = (__pyx_v_db == NULL);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+07539:         raise c_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7539, __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(0, 7539, __pyx_L1_error)
+07540:     b = qdb_pystr_buf_new()
  __pyx_v_b = qdb_pystr_buf_new();
+07541:     memset(&c_schema, 0, sizeof(ArrowSchema))
  (void)(memset((&__pyx_v_c_schema), 0, (sizeof(struct ArrowSchema))));
+07542:     try:
  /*try:*/ {
+07543:         str_to_table_name(b, <PyObject*>table_name, &c_table_name)
    __pyx_t_11 = __pyx_f_7questdb_7_client_str_to_table_name(__pyx_v_b, ((PyObject *)__pyx_v_table_name), (&__pyx_v_c_table_name)); if (unlikely(__pyx_t_11 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7543, __pyx_L18_error)
+07544:         if at_is_column:
    if (__pyx_v_at_is_column) {
/* … */
    }
+07545:             str_to_column_name(b, at, &c_ts_column)
      __pyx_t_2 = __pyx_v_at;
      __Pyx_INCREF(__pyx_t_2);
      if (!(likely(PyUnicode_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_2))) __PYX_ERR(0, 7545, __pyx_L18_error)
      __pyx_t_11 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_v_b, ((PyObject*)__pyx_t_2), (&__pyx_v_c_ts_column)); if (unlikely(__pyx_t_11 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7545, __pyx_L18_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+07546:             c_ts_column_ptr = &c_ts_column
      __pyx_v_c_ts_column_ptr = (&__pyx_v_c_ts_column);
 07547: 
+07548:         _ensure_doesnt_have_gil(&gs)
    (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+07549:         conn = questdb_db_borrow_direct_sender(db, &err)
    __pyx_v_conn = questdb_db_borrow_direct_sender(__pyx_v_db, (&__pyx_v_err));
+07550:         _ensure_has_gil(&gs)
    __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+07551:         if conn == NULL:
    __pyx_t_1 = (__pyx_v_conn == NULL);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+07552:             raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7552, __pyx_L18_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(0, 7552, __pyx_L18_error)
+07553:         try:
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        goto __pyx_L30_try_end;
        __pyx_L25_error:;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
        __pyx_L27_except_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);
        goto __pyx_L23_error;
        __pyx_L30_try_end:;
      }
    }
+07554:             for iteration in range(iterations):
          __pyx_t_4 = __pyx_v_iterations;
          __pyx_t_15 = __pyx_t_4;
          for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_15; __pyx_t_16+=1) {
            __pyx_v_iteration = __pyx_t_16;
+07555:                 _capsule_consume_stream(
            __pyx_t_11 = __pyx_f_7questdb_7_client__capsule_consume_stream(__pyx_v_conn, __pyx_v_arrow_source, __pyx_v_c_table_name, __pyx_v_c_ts_column_ptr, 0, 0, (&__pyx_v_c_schema), NULL, 0, (&__pyx_v_any_flushed), (&__pyx_v_deferred_since_sync), (&__pyx_v_may_have_committed_prefix), Py_None, Py_None); if (unlikely(__pyx_t_11 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7555, __pyx_L25_error)
          }
 07556:                     conn, arrow_source, c_table_name, c_ts_column_ptr,
 07557:                     False, 0, &c_schema, NULL, 0, &any_flushed,
 07558:                     &deferred_since_sync, &may_have_committed_prefix,
 07559:                     None, None)
+07560:             if any_flushed:
          if (__pyx_v_any_flushed) {
/* … */
          }
+07561:                 _dataframe_columnar_sync(conn)
            __pyx_t_11 = __pyx_f_7questdb_7_client__dataframe_columnar_sync(__pyx_v_conn); if (unlikely(__pyx_t_11 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7561, __pyx_L25_error)
+07562:             completed = iterations
          __pyx_v_completed = __pyx_v_iterations;
+07563:         except:
        /*except:*/ {
          __Pyx_AddTraceback("questdb._client._bench_dataframe_flush_arrow_batch", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_6, &__pyx_t_3) < 0) __PYX_ERR(0, 7563, __pyx_L27_except_error)
          __Pyx_XGOTREF(__pyx_t_2);
          __Pyx_XGOTREF(__pyx_t_6);
          __Pyx_XGOTREF(__pyx_t_3);
+07564:             questdb_db_drop_direct_sender(db, conn)
          questdb_db_drop_direct_sender(__pyx_v_db, __pyx_v_conn);
+07565:             conn = NULL
          __pyx_v_conn = NULL;
+07566:             raise
          __Pyx_GIVEREF(__pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_6);
          __Pyx_XGIVEREF(__pyx_t_3);
          __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_6, __pyx_t_3);
          __pyx_t_2 = 0;  __pyx_t_6 = 0;  __pyx_t_3 = 0; 
          __PYX_ERR(0, 7566, __pyx_L27_except_error)
        }
 07567:         finally:
+07568:             if conn != NULL:
    /*finally:*/ {
      /*normal exit:*/{
        __pyx_t_1 = (__pyx_v_conn != NULL);
        if (__pyx_t_1) {
/* … */
        }
        goto __pyx_L24;
      }
      __pyx_L23_error:;
      /*exception exit:*/{
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
         __Pyx_ExceptionSwap(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
        if ( unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_13, &__pyx_t_12) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_13, &__pyx_t_12);
        __Pyx_XGOTREF(__pyx_t_14);
        __Pyx_XGOTREF(__pyx_t_13);
        __Pyx_XGOTREF(__pyx_t_12);
        __Pyx_XGOTREF(__pyx_t_20);
        __Pyx_XGOTREF(__pyx_t_21);
        __Pyx_XGOTREF(__pyx_t_22);
        __pyx_t_17 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_19 = __pyx_filename;
        {
          __pyx_t_1 = (__pyx_v_conn != NULL);
          if (__pyx_t_1) {
/* … */
          }
        }
        __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_14);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_ErrRestore(__pyx_t_14, __pyx_t_13, __pyx_t_12);
        __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0;
        __pyx_lineno = __pyx_t_17; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_19;
        goto __pyx_L18_error;
      }
      __pyx_L24:;
    }
  }
+07569:                 questdb_db_return_direct_sender(db, conn)
          questdb_db_return_direct_sender(__pyx_v_db, __pyx_v_conn);
/* … */
            questdb_db_return_direct_sender(__pyx_v_db, __pyx_v_conn);
 07570:     finally:
+07571:         if c_schema.release != NULL:
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_1 = (__pyx_v_c_schema.release != NULL);
      if (__pyx_t_1) {
/* … */
      }
/* … */
        __pyx_t_1 = (__pyx_v_c_schema.release != NULL);
        if (__pyx_t_1) {
/* … */
        }
+07572:             c_schema.release(&c_schema)
        __pyx_v_c_schema.release((&__pyx_v_c_schema));
/* … */
          __pyx_v_c_schema.release((&__pyx_v_c_schema));
+07573:         if b != NULL:
      __pyx_t_1 = (__pyx_v_b != NULL);
      if (__pyx_t_1) {
/* … */
      }
/* … */
        __pyx_t_1 = (__pyx_v_b != NULL);
        if (__pyx_t_1) {
/* … */
        }
+07574:             qdb_pystr_buf_free(b)
        qdb_pystr_buf_free(__pyx_v_b);
/* … */
          qdb_pystr_buf_free(__pyx_v_b);
+07575:         if db != NULL:
      __pyx_t_1 = (__pyx_v_db != NULL);
      if (__pyx_t_1) {
/* … */
      }
      goto __pyx_L19;
    }
    __pyx_L18_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
      if ( unlikely(__Pyx_GetException(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20) < 0)) __Pyx_ErrFetch(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20);
      __Pyx_XGOTREF(__pyx_t_22);
      __Pyx_XGOTREF(__pyx_t_21);
      __Pyx_XGOTREF(__pyx_t_20);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_14);
      __pyx_t_18 = __pyx_lineno; __pyx_t_17 = __pyx_clineno; __pyx_t_23 = __pyx_filename;
      {
/* … */
        __pyx_t_1 = (__pyx_v_db != NULL);
        if (__pyx_t_1) {
/* … */
        }
      }
      __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_22);
      __Pyx_XGIVEREF(__pyx_t_21);
      __Pyx_XGIVEREF(__pyx_t_20);
      __Pyx_ErrRestore(__pyx_t_22, __pyx_t_21, __pyx_t_20);
      __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
      __pyx_lineno = __pyx_t_18; __pyx_clineno = __pyx_t_17; __pyx_filename = __pyx_t_23;
      goto __pyx_L1_error;
    }
    __pyx_L19:;
  }
+07576:             questdb_db_close(db)
        questdb_db_close(__pyx_v_db);
/* … */
          questdb_db_close(__pyx_v_db);
 07577: 
+07578:     return {
  __Pyx_XDECREF(__pyx_r);
+07579:         'iterations': iterations,
  __pyx_t_3 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7579, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyLong_FromSize_t(__pyx_v_iterations); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7579, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_iterations, __pyx_t_6) < (0)) __PYX_ERR(0, 7579, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+07580:         'row_count': row_count,
  __pyx_t_6 = __Pyx_PyLong_FromSize_t(__pyx_v_row_count); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7580, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_row_count, __pyx_t_6) < (0)) __PYX_ERR(0, 7579, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+07581:         'col_count': col_count,
  __pyx_t_6 = __Pyx_PyLong_FromSize_t(__pyx_v_col_count); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7581, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_col_count, __pyx_t_6) < (0)) __PYX_ERR(0, 7579, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+07582:         'logical_cells': row_count * col_count,
  __pyx_t_6 = __Pyx_PyLong_FromSize_t((__pyx_v_row_count * __pyx_v_col_count)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7582, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_logical_cells, __pyx_t_6) < (0)) __PYX_ERR(0, 7579, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+07583:         'completed': completed,
  __pyx_t_6 = __Pyx_PyLong_FromSize_t(__pyx_v_completed); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7583, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_completed, __pyx_t_6) < (0)) __PYX_ERR(0, 7579, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 07584:     }
 07585: 
 07586: 
+07587: def _bench_dataframe_plan_and_populate_column_chunks(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_115_bench_dataframe_plan_and_populate_column_chunks(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_114_bench_dataframe_plan_and_populate_column_chunks, "\n    Internal benchmark hook for Layer 1 pandas columnar work.\n\n    This builds the shared dataframe plan and populates #148 chunks, but it\n    never flushes to a sender. It is intentionally kept out of ``__all__``.\n    ");
static PyMethodDef __pyx_mdef_7questdb_7_client_115_bench_dataframe_plan_and_populate_column_chunks = {"_bench_dataframe_plan_and_populate_column_chunks", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_115_bench_dataframe_plan_and_populate_column_chunks, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_114_bench_dataframe_plan_and_populate_column_chunks};
static PyObject *__pyx_pw_7questdb_7_client_115_bench_dataframe_plan_and_populate_column_chunks(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_df = 0;
  PyObject *__pyx_v_table_name = 0;
  PyObject *__pyx_v_table_name_col = 0;
  PyObject *__pyx_v_symbols = 0;
  PyObject *__pyx_v_at = 0;
  size_t __pyx_v_iterations;
  size_t __pyx_v_max_rows_per_chunk;
  #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("_bench_dataframe_plan_and_populate_column_chunks (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_df_2,&__pyx_mstate_global->__pyx_n_u_table_name,&__pyx_mstate_global->__pyx_n_u_table_name_col,&__pyx_mstate_global->__pyx_n_u_symbols,&__pyx_mstate_global->__pyx_n_u_at,&__pyx_mstate_global->__pyx_n_u_iterations,&__pyx_mstate_global->__pyx_n_u_max_rows_per_chunk,0};
  PyObject* values[7] = {0,0,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(0, 7587, __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(0, 7587, __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, "_bench_dataframe_plan_and_populate_column_chunks", 0) < (0)) __PYX_ERR(0, 7587, __pyx_L3_error)
/* … */
  /* 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_114_bench_dataframe_plan_and_populate_column_chunks(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_df, PyObject *__pyx_v_table_name, PyObject *__pyx_v_table_name_col, PyObject *__pyx_v_symbols, PyObject *__pyx_v_at, size_t __pyx_v_iterations, size_t __pyx_v_max_rows_per_chunk) {
  CYTHON_UNUSED size_t __pyx_v_iteration;
  struct qdb_pystr_buf *__pyx_v_b;
  struct __pyx_t_7questdb_7_client_dataframe_plan_t __pyx_v_plan;
  struct qwp_chunk *__pyx_v_chunk;
  struct line_sender_error *__pyx_v_err;
  uint64_t __pyx_v_start_row_path_emissions;
  uint64_t __pyx_v_end_row_path_emissions;
  size_t __pyx_v_row_count;
  size_t __pyx_v_col_count;
  size_t __pyx_v_populated_rows;
  size_t __pyx_v_populated_rows_total;
  size_t __pyx_v_populated_chunks;
  size_t __pyx_v_rows_per_chunk;
  size_t __pyx_v_row_offset;
  size_t __pyx_v_chunk_rows;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._bench_dataframe_plan_and_populate_column_chunks", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_25 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 7587, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
/* … */
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_115_bench_dataframe_plan_and_populate_column_chunks, 0, __pyx_mstate_global->__pyx_n_u_bench_dataframe_plan_and_popula, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[206])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 7587, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_17, __pyx_t_25);
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_bench_dataframe_plan_and_popula, __pyx_t_17) < (0)) __PYX_ERR(0, 7587, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 07588:         object df,
 07589:         *,
+07590:         object table_name=None,
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_table_name, Py_None) < (0)) __PYX_ERR(0, 7587, __pyx_L1_error)
+07591:         object table_name_col=None,
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)((PyObject*)__pyx_mstate_global->__pyx_n_u_auto)));
/* … */
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)((PyObject*)__pyx_mstate_global->__pyx_n_u_auto)));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_table_name_col, Py_None) < (0)) __PYX_ERR(0, 7587, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_symbols, ((PyObject*)__pyx_mstate_global->__pyx_n_u_auto)) < (0)) __PYX_ERR(0, 7587, __pyx_L1_error)
 07592:         object symbols='auto',
+07593:         object at=None,
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_bench_dataframe_plan_and_populate_column_chunks", 1, 1, 1, i); __PYX_ERR(0, 7587, __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(0, 7587, __pyx_L3_error)
/* … */
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_df = values[0];
    __pyx_v_table_name = values[1];
    __pyx_v_table_name_col = values[2];
    __pyx_v_symbols = values[3];
    __pyx_v_at = values[4];
    if (values[5]) {
      __pyx_v_iterations = __Pyx_PyLong_As_size_t(values[5]); if (unlikely((__pyx_v_iterations == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 7594, __pyx_L3_error)
    } else {
      __pyx_v_iterations = ((size_t)((size_t)1));
    }
    if (values[6]) {
      __pyx_v_max_rows_per_chunk = __Pyx_PyLong_As_size_t(values[6]); if (unlikely((__pyx_v_max_rows_per_chunk == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 7595, __pyx_L3_error)
    } else {
      __pyx_v_max_rows_per_chunk = ((size_t)((size_t)0x4000));
    }
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_bench_dataframe_plan_and_populate_column_chunks", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 7587, __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._bench_dataframe_plan_and_populate_column_chunks", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_114_bench_dataframe_plan_and_populate_column_chunks(__pyx_self, __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at, __pyx_v_iterations, __pyx_v_max_rows_per_chunk);
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_at, Py_None) < (0)) __PYX_ERR(0, 7587, __pyx_L1_error)
+07594:         size_t iterations=1,
  __pyx_t_17 = __Pyx_PyLong_FromSize_t(((size_t)1)); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 7594, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_iterations, __pyx_t_17) < (0)) __PYX_ERR(0, 7587, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+07595:         size_t max_rows_per_chunk=16384):
  __pyx_t_17 = __Pyx_PyLong_FromSize_t(((size_t)0x4000)); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 7595, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_max_rows_per_chunk, __pyx_t_17) < (0)) __PYX_ERR(0, 7587, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 07596:     """
 07597:     Internal benchmark hook for Layer 1 pandas columnar work.
 07598: 
 07599:     This builds the shared dataframe plan and populates #148 chunks, but it
 07600:     never flushes to a sender. It is intentionally kept out of ``__all__``.
 07601:     """
 07602:     cdef size_t iteration
+07603:     cdef qdb_pystr_buf* b = NULL
  __pyx_v_b = NULL;
 07604:     cdef dataframe_plan_t plan
+07605:     cdef qwp_chunk* chunk = NULL
  __pyx_v_chunk = NULL;
+07606:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 07607:     cdef uint64_t start_row_path_emissions
 07608:     cdef uint64_t end_row_path_emissions
+07609:     cdef size_t row_count = 0
  __pyx_v_row_count = 0;
+07610:     cdef size_t col_count = 0
  __pyx_v_col_count = 0;
+07611:     cdef size_t populated_rows = 0
  __pyx_v_populated_rows = 0;
+07612:     cdef size_t populated_rows_total = 0
  __pyx_v_populated_rows_total = 0;
+07613:     cdef size_t populated_chunks = 0
  __pyx_v_populated_chunks = 0;
+07614:     cdef size_t rows_per_chunk = 0
  __pyx_v_rows_per_chunk = 0;
 07615:     cdef size_t row_offset
 07616:     cdef size_t chunk_rows
 07617:     global _dataframe_count_row_path_emissions
 07618:     global _dataframe_row_path_emissions
 07619: 
+07620:     if iterations == 0:
  __pyx_t_1 = (__pyx_v_iterations == 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+07621:         raise ValueError('iterations must be greater than zero')
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_iterations_must_be_greater_than};
      __pyx_t_2 = __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;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7621, __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(0, 7621, __pyx_L1_error)
 07622: 
+07623:     start_row_path_emissions = _dataframe_row_path_emissions
  __pyx_v_start_row_path_emissions = __pyx_v_7questdb_7_client__dataframe_row_path_emissions;
+07624:     _dataframe_count_row_path_emissions = True
  __pyx_v_7questdb_7_client__dataframe_count_row_path_emissions = 1;
+07625:     try:
  /*try:*/ {
+07626:         for iteration in range(iterations):
    __pyx_t_4 = __pyx_v_iterations;
    __pyx_t_5 = __pyx_t_4;
    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
      __pyx_v_iteration = __pyx_t_6;
+07627:             b = qdb_pystr_buf_new()
      __pyx_v_b = qdb_pystr_buf_new();
+07628:             plan = dataframe_plan_blank()
      __pyx_v_plan = __pyx_f_7questdb_7_client_dataframe_plan_blank();
+07629:             try:
      /*try:*/ {
+07630:                 _dataframe_plan_build(
        __pyx_t_7 = __pyx_f_7questdb_7_client__dataframe_plan_build(__pyx_v_b, __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at, (&__pyx_v_plan), ((PyObject*)__pyx_t_2)); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7630, __pyx_L12_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 07631:                     b,
 07632:                     df,
 07633:                     table_name,
 07634:                     table_name_col,
 07635:                     symbols,
 07636:                     at,
 07637:                     &plan,
+07638:                     _FIELD_TARGETS_QWP)
        __pyx_t_2 = __pyx_v_7questdb_7_client__FIELD_TARGETS_QWP;
        __Pyx_INCREF(__pyx_t_2);
+07639:                 row_count = plan.row_count
        __pyx_t_8 = __pyx_v_plan.row_count;
        __pyx_v_row_count = __pyx_t_8;
+07640:                 col_count = plan.col_count
        __pyx_t_8 = __pyx_v_plan.col_count;
        __pyx_v_col_count = __pyx_t_8;
+07641:                 if (plan.col_count == 0) or (plan.row_count == 0):
        __pyx_t_9 = (__pyx_v_plan.col_count == 0);
        if (!__pyx_t_9) {
        } else {
          __pyx_t_1 = __pyx_t_9;
          goto __pyx_L15_bool_binop_done;
        }
        __pyx_t_9 = (__pyx_v_plan.row_count == 0);
        __pyx_t_1 = __pyx_t_9;
        __pyx_L15_bool_binop_done:;
        if (__pyx_t_1) {
/* … */
        }
+07642:                     continue
          goto __pyx_L9_continue;
 07643: 
+07644:                 _dataframe_columnar_promote_cols(df, &plan)
        __pyx_t_7 = __pyx_f_7questdb_7_client__dataframe_columnar_promote_cols(__pyx_v_df, (&__pyx_v_plan)); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7644, __pyx_L12_error)
+07645:                 _dataframe_columnar_validate_plan(df, &plan)
        __pyx_t_7 = __pyx_f_7questdb_7_client__dataframe_columnar_validate_plan(__pyx_v_df, (&__pyx_v_plan)); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7645, __pyx_L12_error)
+07646:                 _dataframe_columnar_prebuild_pyobj(df, &plan)
        __pyx_t_7 = __pyx_f_7questdb_7_client__dataframe_columnar_prebuild_pyobj(__pyx_v_df, (&__pyx_v_plan)); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7646, __pyx_L12_error)
+07647:                 rows_per_chunk = _dataframe_columnar_rows_per_chunk(
        __pyx_v_rows_per_chunk = __pyx_f_7questdb_7_client__dataframe_columnar_rows_per_chunk((&__pyx_v_plan), __pyx_v_max_rows_per_chunk);
 07648:                     &plan,
 07649:                     max_rows_per_chunk)
+07650:                 chunk = qwp_chunk_new(
        __pyx_v_chunk = qwp_chunk_new(__pyx_v_plan.c_table_name.buf, __pyx_v_plan.c_table_name.len, (&__pyx_v_err));
 07651:                     plan.c_table_name.buf,
 07652:                     plan.c_table_name.len,
 07653:                     &err)
+07654:                 if chunk == NULL:
        __pyx_t_1 = (__pyx_v_chunk == NULL);
        if (unlikely(__pyx_t_1)) {
/* … */
        }
+07655:                     raise c_err_to_py(err)
          __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7655, __pyx_L12_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(0, 7655, __pyx_L12_error)
+07656:                 row_offset = 0
        __pyx_v_row_offset = 0;
+07657:                 while row_offset < plan.row_count:
        while (1) {
          __pyx_t_1 = (__pyx_v_row_offset < __pyx_v_plan.row_count);
          if (!__pyx_t_1) break;
+07658:                     if not qwp_chunk_clear(chunk, &err):
          __pyx_t_1 = (!qwp_chunk_clear(__pyx_v_chunk, (&__pyx_v_err)));
          if (unlikely(__pyx_t_1)) {
/* … */
          }
+07659:                         raise c_err_to_py(err)
            __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7659, __pyx_L12_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(0, 7659, __pyx_L12_error)
+07660:                     chunk_rows = rows_per_chunk
          __pyx_v_chunk_rows = __pyx_v_rows_per_chunk;
+07661:                     if chunk_rows > plan.row_count - row_offset:
          __pyx_t_1 = (__pyx_v_chunk_rows > (__pyx_v_plan.row_count - __pyx_v_row_offset));
          if (__pyx_t_1) {
/* … */
          }
+07662:                         chunk_rows = plan.row_count - row_offset
            __pyx_v_chunk_rows = (__pyx_v_plan.row_count - __pyx_v_row_offset);
+07663:                     _dataframe_columnar_populate_chunk(
          __pyx_t_7 = __pyx_f_7questdb_7_client__dataframe_columnar_populate_chunk((&__pyx_v_plan), __pyx_v_chunk, __pyx_v_row_offset, __pyx_v_chunk_rows); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7663, __pyx_L12_error)
 07664:                         &plan,
 07665:                         chunk,
 07666:                         row_offset,
 07667:                         chunk_rows)
+07668:                     populated_rows = qwp_chunk_row_count(chunk, &err)
          __pyx_v_populated_rows = qwp_chunk_row_count(__pyx_v_chunk, (&__pyx_v_err));
+07669:                     if populated_rows == <size_t>-1:
          __pyx_t_1 = (__pyx_v_populated_rows == ((size_t)-1L));
          if (unlikely(__pyx_t_1)) {
/* … */
          }
+07670:                         raise c_err_to_py(err)
            __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7670, __pyx_L12_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(0, 7670, __pyx_L12_error)
+07671:                     if populated_rows != 0:
          __pyx_t_1 = (__pyx_v_populated_rows != 0);
          if (__pyx_t_1) {
/* … */
          }
+07672:                         populated_chunks += 1
            __pyx_v_populated_chunks = (__pyx_v_populated_chunks + 1);
+07673:                         populated_rows_total += populated_rows
            __pyx_v_populated_rows_total = (__pyx_v_populated_rows_total + __pyx_v_populated_rows);
+07674:                     row_offset += chunk_rows
          __pyx_v_row_offset = (__pyx_v_row_offset + __pyx_v_chunk_rows);
        }
      }
 07675:             finally:
+07676:                 if chunk != NULL:
      /*finally:*/ {
        /*normal exit:*/{
          __pyx_t_1 = (__pyx_v_chunk != NULL);
          if (__pyx_t_1) {
/* … */
          }
/* … */
            __pyx_t_1 = (__pyx_v_chunk != NULL);
            if (__pyx_t_1) {
/* … */
            }
/* … */
          __pyx_t_1 = (__pyx_v_chunk != NULL);
          if (__pyx_t_1) {
/* … */
          }
+07677:                     qwp_chunk_free(chunk)
            qwp_chunk_free(__pyx_v_chunk);
/* … */
              qwp_chunk_free(__pyx_v_chunk);
/* … */
            qwp_chunk_free(__pyx_v_chunk);
+07678:                     chunk = NULL
            __pyx_v_chunk = NULL;
/* … */
              __pyx_v_chunk = NULL;
/* … */
            __pyx_v_chunk = NULL;
+07679:                 dataframe_plan_release(&plan)
          __pyx_f_7questdb_7_client_dataframe_plan_release((&__pyx_v_plan));
/* … */
            __pyx_f_7questdb_7_client_dataframe_plan_release((&__pyx_v_plan));
/* … */
          __pyx_f_7questdb_7_client_dataframe_plan_release((&__pyx_v_plan));
+07680:                 if b != NULL:
          __pyx_t_1 = (__pyx_v_b != NULL);
          if (__pyx_t_1) {
/* … */
          }
          goto __pyx_L13;
        }
        __pyx_L12_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __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_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 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_10 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_12 = __pyx_filename;
          {
/* … */
            __pyx_t_1 = (__pyx_v_b != NULL);
            if (__pyx_t_1) {
/* … */
            }
          }
          __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_10; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_12;
          goto __pyx_L5_error;
        }
        __pyx_L9_continue: {
/* … */
          __pyx_t_1 = (__pyx_v_b != NULL);
          if (__pyx_t_1) {
/* … */
          }
          goto __pyx_L7_continue;
        }
        __pyx_L13:;
      }
      __pyx_L7_continue:;
    }
  }
+07681:                     qdb_pystr_buf_free(b)
            qdb_pystr_buf_free(__pyx_v_b);
/* … */
              qdb_pystr_buf_free(__pyx_v_b);
/* … */
            qdb_pystr_buf_free(__pyx_v_b);
+07682:                     b = NULL
            __pyx_v_b = NULL;
/* … */
              __pyx_v_b = NULL;
/* … */
            __pyx_v_b = NULL;
 07683:     finally:
+07684:         _dataframe_count_row_path_emissions = False
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_v_7questdb_7_client__dataframe_count_row_path_emissions = 0;
      goto __pyx_L6;
    }
    __pyx_L5_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_13 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_14, &__pyx_t_13);
      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_13);
      __pyx_t_11 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_19 = __pyx_filename;
      {
        __pyx_v_7questdb_7_client__dataframe_count_row_path_emissions = 0;
      }
      __Pyx_XGIVEREF(__pyx_t_15);
      __Pyx_XGIVEREF(__pyx_t_14);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_14, __pyx_t_13);
      __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_13 = 0;
      __pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_19;
      goto __pyx_L1_error;
    }
    __pyx_L6:;
  }
 07685: 
+07686:     end_row_path_emissions = _dataframe_row_path_emissions
  __pyx_v_end_row_path_emissions = __pyx_v_7questdb_7_client__dataframe_row_path_emissions;
+07687:     return {
  __Pyx_XDECREF(__pyx_r);
+07688:         'iterations': iterations,
  __pyx_t_2 = __Pyx_PyDict_NewPresized(9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7688, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_v_iterations); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7688, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_iterations, __pyx_t_3) < (0)) __PYX_ERR(0, 7688, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07689:         'row_count': row_count,
  __pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_v_row_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7689, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_row_count, __pyx_t_3) < (0)) __PYX_ERR(0, 7688, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07690:         'col_count': col_count,
  __pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_v_col_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7690, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_col_count, __pyx_t_3) < (0)) __PYX_ERR(0, 7688, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07691:         'logical_cells': row_count * col_count,
  __pyx_t_3 = __Pyx_PyLong_FromSize_t((__pyx_v_row_count * __pyx_v_col_count)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7691, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_logical_cells, __pyx_t_3) < (0)) __PYX_ERR(0, 7688, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07692:         'rows_per_chunk': rows_per_chunk,
  __pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_v_rows_per_chunk); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7692, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_rows_per_chunk, __pyx_t_3) < (0)) __PYX_ERR(0, 7688, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07693:         'populated_chunks': populated_chunks,
  __pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_v_populated_chunks); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7693, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_populated_chunks, __pyx_t_3) < (0)) __PYX_ERR(0, 7688, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07694:         'populated_rows_total': populated_rows_total,
  __pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_v_populated_rows_total); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7694, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_populated_rows_total, __pyx_t_3) < (0)) __PYX_ERR(0, 7688, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07695:         'last_populated_rows': populated_rows,
  __pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_v_populated_rows); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7695, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_last_populated_rows, __pyx_t_3) < (0)) __PYX_ERR(0, 7688, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 07696:         'row_path_cell_emissions': (
+07697:             end_row_path_emissions - start_row_path_emissions),
  __pyx_t_3 = __Pyx_PyLong_From_uint64_t((__pyx_v_end_row_path_emissions - __pyx_v_start_row_path_emissions)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7697, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_row_path_cell_emissions, __pyx_t_3) < (0)) __PYX_ERR(0, 7688, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 07698:     }
 07699: 
 07700: 
+07701: cdef object _POLARS = None
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__POLARS);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__POLARS, Py_None);
  __Pyx_GIVEREF(Py_None);
+07702: cdef object _POLARS_DATAFRAME_T = None
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__POLARS_DATAFRAME_T);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__POLARS_DATAFRAME_T, Py_None);
  __Pyx_GIVEREF(Py_None);
+07703: cdef object _POLARS_LAZYFRAME_T = None
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__POLARS_LAZYFRAME_T);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__POLARS_LAZYFRAME_T, Py_None);
  __Pyx_GIVEREF(Py_None);
+07704: cdef object _POLARS_SERIES_T = None
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__POLARS_SERIES_T);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__POLARS_SERIES_T, Py_None);
  __Pyx_GIVEREF(Py_None);
 07705: 
 07706: # Whether this polars reinterprets 8- and 16-bit integers (1.39+).
 07707: # None until first asked. A plain module global, so tests can set it.
+07708: _POLARS_NARROW_REINTERPRET = None
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_POLARS_NARROW_REINTERPRET, Py_None) < (0)) __PYX_ERR(0, 7708, __pyx_L1_error)
 07709: 
 07710: 
+07711: cdef bint _polars_reinterprets_narrow_ints():
static int __pyx_f_7questdb_7_client__polars_reinterprets_narrow_ints(void) {
  int __pyx_r;
/* … */
  /* 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_10);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("questdb._client._polars_reinterprets_narrow_ints", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 07712:     """Whether `reinterpret` works on an 8- or 16-bit polars column.
 07713: 
 07714:     Probed once, by trying it, rather than read off the version string.
 07715:     A `LazyFrame` raises only when collected, so the call that builds
 07716:     the expression cannot tell. Any failure means "no": the exception
 07717:     class differs across polars versions. Two threads that both find
 07718:     the answer missing both probe and store the same value. Called only
 07719:     after `_try_import_polars()` has set `_POLARS`.
 07720:     """
 07721:     global _POLARS_NARROW_REINTERPRET
+07722:     if _POLARS_NARROW_REINTERPRET is None:
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_POLARS_NARROW_REINTERPRET); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7722, __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) {
/* … */
  }
+07723:         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_L9_try_end;
      __pyx_L4_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 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_L6_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_L5_exception_handled:;
      __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);
      __pyx_L9_try_end:;
    }
+07724:             _POLARS.Series([0], dtype=_POLARS.UInt8).reinterpret(signed=True)
        __pyx_t_8 = __pyx_v_7questdb_7_client__POLARS;
        __Pyx_INCREF(__pyx_t_8);
        __pyx_t_9 = PyList_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7724, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
        __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_0);
        if (__Pyx_PyList_SET_ITEM(__pyx_t_9, 0, __pyx_mstate_global->__pyx_int_0) != (0)) __PYX_ERR(0, 7724, __pyx_L4_error);
        __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_UInt8); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 7724, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_11 = 0;
        {
          PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_8, __pyx_t_9};
          __pyx_t_12 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7724, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_12);
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_10, __pyx_t_12, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 7724, __pyx_L4_error)
          __pyx_t_7 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_Series, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_12);
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7724, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_7);
        }
        __pyx_t_6 = __pyx_t_7;
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_11 = 0;
        {
          PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_6, NULL};
          __pyx_t_12 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7724, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_12);
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_signed, Py_True, __pyx_t_12, __pyx_callargs+1, 0) < (0)) __PYX_ERR(0, 7724, __pyx_L4_error)
          __pyx_t_1 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_reinterpret, __pyx_callargs+__pyx_t_11, (1-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_12);
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7724, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_1);
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+07725:             _POLARS_NARROW_REINTERPRET = True
        if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_POLARS_NARROW_REINTERPRET, Py_True) < (0)) __PYX_ERR(0, 7725, __pyx_L4_error)
+07726:         except Exception:
      __pyx_t_13 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
      if (__pyx_t_13) {
        __Pyx_AddTraceback("questdb._client._polars_reinterprets_narrow_ints", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_7, &__pyx_t_12) < 0) __PYX_ERR(0, 7726, __pyx_L6_except_error)
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_12);
+07727:             _POLARS_NARROW_REINTERPRET = False
        if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_POLARS_NARROW_REINTERPRET, Py_False) < (0)) __PYX_ERR(0, 7727, __pyx_L6_except_error)
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        goto __pyx_L5_exception_handled;
      }
      goto __pyx_L6_except_error;
+07728:     return _POLARS_NARROW_REINTERPRET
  __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_POLARS_NARROW_REINTERPRET); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7728, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 7728, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;
 07729: 
 07730: 
+07731: cdef bint _try_import_polars():
static int __pyx_f_7questdb_7_client__try_import_polars(void) {
  PyObject *__pyx_v_polars = NULL;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb._client._try_import_polars", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_polars);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 07732:     global _POLARS, _POLARS_DATAFRAME_T, _POLARS_LAZYFRAME_T
 07733:     global _POLARS_SERIES_T
+07734:     if _POLARS is not None:
  __pyx_t_1 = (__pyx_v_7questdb_7_client__POLARS != Py_None);
  if (__pyx_t_1) {
/* … */
  }
+07735:         return True
    __pyx_r = 1;
    goto __pyx_L0;
+07736:     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_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_L7_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_L9_try_end:;
  }
+07737:         import polars
      __pyx_t_6 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_polars, 0, 0, NULL, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7737, __pyx_L4_error)
      __pyx_t_5 = __pyx_t_6;
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_v_polars = __pyx_t_5;
      __pyx_t_5 = 0;
+07738:     except ImportError:
    __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_ImportError))));
    if (__pyx_t_7) {
      __Pyx_ErrRestore(0,0,0);
+07739:         return False
      __pyx_r = 0;
      goto __pyx_L7_except_return;
    }
    goto __pyx_L6_except_error;
+07740:     _POLARS_DATAFRAME_T = polars.DataFrame
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_polars, __pyx_mstate_global->__pyx_n_u_DataFrame); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7740, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__POLARS_DATAFRAME_T);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__POLARS_DATAFRAME_T, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_5);
  __pyx_t_5 = 0;
+07741:     _POLARS_LAZYFRAME_T = polars.LazyFrame
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_polars, __pyx_mstate_global->__pyx_n_u_LazyFrame); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7741, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__POLARS_LAZYFRAME_T);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__POLARS_LAZYFRAME_T, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_5);
  __pyx_t_5 = 0;
+07742:     _POLARS_SERIES_T = polars.Series
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_polars, __pyx_mstate_global->__pyx_n_u_Series); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7742, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__POLARS_SERIES_T);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__POLARS_SERIES_T, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_5);
  __pyx_t_5 = 0;
+07743:     _POLARS = polars
  __Pyx_INCREF(__pyx_v_polars);
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__POLARS);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__POLARS, __pyx_v_polars);
  __Pyx_GIVEREF(__pyx_v_polars);
+07744:     return True
  __pyx_r = 1;
  goto __pyx_L0;
 07745: 
 07746: 
+07747: cdef bint _is_polars_dataframe_or_lazy(object obj):
static int __pyx_f_7questdb_7_client__is_polars_dataframe_or_lazy(PyObject *__pyx_v_obj) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client._is_polars_dataframe_or_lazy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+07748:     if not _try_import_polars():
  __pyx_t_1 = __pyx_f_7questdb_7_client__try_import_polars(); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 7748, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {
/* … */
  }
+07749:         return False
    __pyx_r = 0;
    goto __pyx_L0;
+07750:     return isinstance(obj, (_POLARS_DATAFRAME_T, _POLARS_LAZYFRAME_T))
  __Pyx_INCREF(__pyx_v_7questdb_7_client__POLARS_DATAFRAME_T);
  __pyx_t_3 = __pyx_v_7questdb_7_client__POLARS_DATAFRAME_T;
  __Pyx_INCREF(__pyx_v_7questdb_7_client__POLARS_LAZYFRAME_T);
  __pyx_t_4 = __pyx_v_7questdb_7_client__POLARS_LAZYFRAME_T;
  __pyx_t_1 = PyObject_IsInstance(__pyx_v_obj, __pyx_t_3); 
  if (!__pyx_t_1) {
  } else {
    __pyx_t_2 = __pyx_t_1;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_1 = PyObject_IsInstance(__pyx_v_obj, __pyx_t_4); 
  __pyx_t_2 = __pyx_t_1;
  __pyx_L4_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;
 07751: 
 07752: 
+07753: cdef object _polars_named_dtypes(object frame):
static PyObject *__pyx_f_7questdb_7_client__polars_named_dtypes(PyObject *__pyx_v_frame) {
  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_AddTraceback("questdb._client._polars_named_dtypes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 07754:     """`(name, dtype)` for each column a polars DataFrame or Series
 07755:     exports, in order; None for any other object. A Series exports as a
 07756:     single column named after it. Call only after `_try_import_polars()`
 07757:     has returned True."""
+07758:     if isinstance(frame, _POLARS_DATAFRAME_T):
  __pyx_t_1 = __pyx_v_7questdb_7_client__POLARS_DATAFRAME_T;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_frame, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 7758, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+07759:         return list(frame.schema.items())
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7759, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __pyx_t_4;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_5 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_items, __pyx_callargs+__pyx_t_5, (1-__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_1)) __PYX_ERR(0, 7759, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __pyx_t_4 = __Pyx_PySequence_ListKeepNew(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7759, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;
+07760:     if isinstance(frame, _POLARS_SERIES_T):
  __pyx_t_4 = __pyx_v_7questdb_7_client__POLARS_SERIES_T;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_frame, __pyx_t_4); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 7760, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__pyx_t_2) {
/* … */
  }
+07761:         return [(frame.name, frame.dtype)]
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7761, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7761, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7761, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_4);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4) != (0)) __PYX_ERR(0, 7761, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_1);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1) != (0)) __PYX_ERR(0, 7761, __pyx_L1_error);
    __pyx_t_4 = 0;
    __pyx_t_1 = 0;
    __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7761, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_3);
    if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_3) != (0)) __PYX_ERR(0, 7761, __pyx_L1_error);
    __pyx_t_3 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+07762:     return None
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
 07763: 
 07764: 
+07765: cdef void_int _reject_polars_object_columns(object frame) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__reject_polars_object_columns(PyObject *__pyx_v_frame) {
  PyObject *__pyx_v_object_dtype = 0;
  PyObject *__pyx_v_columns = 0;
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_v_dtype = 0;
  __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_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("questdb._client._reject_polars_object_columns", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_object_dtype);
  __Pyx_XDECREF(__pyx_v_columns);
  __Pyx_XDECREF(__pyx_v_name);
  __Pyx_XDECREF(__pyx_v_dtype);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 07766:     """polars exports an ``Object`` column as ``fixed_size_binary(8)``
 07767:     holding in-process handles, which the server would store as BINARY
 07768:     blobs of raw memory addresses. Reject such a column of a polars
 07769:     DataFrame or Series before the Arrow export, mirroring the Rust
 07770:     polars API. The code is `ArrowUnsupportedColumnKind`, the one 5.0
 07771:     raises for these inputs. The same column reaching the client in any
 07772:     other shape is refused by its width, in `_refuse_fsb8_columns`."""
 07773:     cdef object object_dtype
 07774:     cdef object columns
 07775:     cdef object name
 07776:     cdef object dtype
+07777:     if not _try_import_polars():
  __pyx_t_1 = __pyx_f_7questdb_7_client__try_import_polars(); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 7777, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {
/* … */
  }
+07778:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
+07779:     columns = _polars_named_dtypes(frame)
  __pyx_t_3 = __pyx_f_7questdb_7_client__polars_named_dtypes(__pyx_v_frame); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7779, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_columns = __pyx_t_3;
  __pyx_t_3 = 0;
+07780:     if columns is None:
  __pyx_t_2 = (__pyx_v_columns == Py_None);
  if (__pyx_t_2) {
/* … */
  }
+07781:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
+07782:     object_dtype = getattr(_POLARS, 'Object', None)
  __pyx_t_3 = __pyx_v_7questdb_7_client__POLARS;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_GetAttr3(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Object, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7782, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_object_dtype = __pyx_t_4;
  __pyx_t_4 = 0;
+07783:     if object_dtype is None:
  __pyx_t_2 = (__pyx_v_object_dtype == Py_None);
  if (__pyx_t_2) {
/* … */
  }
+07784:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
+07785:     for name, dtype in columns:
  if (likely(PyList_CheckExact(__pyx_v_columns)) || PyTuple_CheckExact(__pyx_v_columns)) {
    __pyx_t_4 = __pyx_v_columns; __Pyx_INCREF(__pyx_t_4);
    __pyx_t_5 = 0;
    __pyx_t_6 = NULL;
  } else {
    __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_columns); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7785, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7785, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_6)) {
      if (likely(PyList_CheckExact(__pyx_t_4))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7785, __pyx_L1_error)
          #endif
          if (__pyx_t_5 >= __pyx_temp) break;
        }
        __pyx_t_3 = __Pyx_PyList_GetItemRefFast(__pyx_t_4, __pyx_t_5, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_5;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_4);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7785, __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_4, __pyx_t_5));
        #else
        __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_5);
        #endif
        ++__pyx_t_5;
      }
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7785, __pyx_L1_error)
    } else {
      __pyx_t_3 = __pyx_t_6(__pyx_t_4);
      if (unlikely(!__pyx_t_3)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 7785, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_3);
    if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
      PyObject* sequence = __pyx_t_3;
      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(0, 7785, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __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_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7785, __pyx_L1_error)
        __Pyx_XGOTREF(__pyx_t_7);
        __pyx_t_8 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7785, __pyx_L1_error)
        __Pyx_XGOTREF(__pyx_t_8);
      }
      #else
      __pyx_t_7 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7785, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7785, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      #endif
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_9 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7785, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_10 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_9);
      index = 0; __pyx_t_7 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_7)) goto __pyx_L8_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_7);
      index = 1; __pyx_t_8 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L8_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_8);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < (0)) __PYX_ERR(0, 7785, __pyx_L1_error)
      __pyx_t_10 = NULL;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      goto __pyx_L9_unpacking_done;
      __pyx_L8_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_10 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 7785, __pyx_L1_error)
      __pyx_L9_unpacking_done:;
    }
    __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_7);
    __pyx_t_7 = 0;
    __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_8);
    __pyx_t_8 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+07786:         if dtype == object_dtype:
    __pyx_t_3 = PyObject_RichCompare(__pyx_v_dtype, __pyx_v_object_dtype, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7786, __pyx_L1_error)
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7786, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(__pyx_t_2)) {
/* … */
    }
+07787:             raise QuestDBError(
      __pyx_t_8 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 7787, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
+07788:                 QuestDBErrorCode.ArrowUnsupportedColumnKind,
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7788, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_ArrowUnsupportedColumnKind); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7788, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+07789:                 f'Bad column {name!r}: polars Object dtype is not '
      __pyx_t_9 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7789, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_12[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
      __pyx_t_12[1] = __pyx_t_9;
      __pyx_t_12[2] = __pyx_mstate_global->__pyx_kp_u_polars_Object_dtype_is_not_supp;
      __pyx_t_13 = __Pyx_PyUnicode_Join(__pyx_t_12, 3, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9) + 110, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9));
      if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 7789, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 07790:                 f'supported; it exports as handles to objects in this '
 07791:                 f'process rather than as data. '
+07792:                 + _polars_object_remedy(name))
      __pyx_t_9 = __pyx_f_7questdb_7_client__polars_object_remedy(__pyx_v_name); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 7792, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_14 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlaceSafe(__pyx_t_13, __pyx_t_9); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 7792, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_15 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_7))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
        assert(__pyx_t_8);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
        __pyx_t_15 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_11, __pyx_t_14};
        __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_15, (3-__pyx_t_15) | (__pyx_t_15*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7787, __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(0, 7787, __pyx_L1_error)
+07793:     return 0
  __pyx_r = 0;
  goto __pyx_L0;
 07794: 
 07795: 
+07796: cdef object _arrow_source_column_names(object frame):
static PyObject *__pyx_f_7questdb_7_client__arrow_source_column_names(PyObject *__pyx_v_frame) {
  PyObject *__pyx_v_names = 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_8);
  __Pyx_AddTraceback("questdb._client._arrow_source_column_names", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_names);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 07797:     """The names `frame`'s Arrow export gives its columns, as the Python
 07798:     objects they come from: a pandas DataFrame's column labels, plus the
 07799:     level names of an index other than a RangeIndex; a polars
 07800:     DataFrame's columns; a polars Series' own name; the schema names of a
 07801:     pyarrow Table, RecordBatch or RecordBatchReader. None for any other
 07802:     type."""
 07803:     cdef list names
+07804:     if _is_pandas_dataframe_object(frame):
  __pyx_t_1 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_frame); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 7804, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+07805:         names = frame.columns.tolist()
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7805, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __pyx_t_4;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_5 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
      __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_tolist, __pyx_callargs+__pyx_t_5, (1-__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(0, 7805, __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(0, 7805, __pyx_L1_error)
    __pyx_v_names = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;
 07806:         # pyarrow's pandas conversion writes each level of an index
 07807:         # other than a RangeIndex as a column. The level's own name is
 07808:         # what the NUL-name check needs; `_pandas_export_dtypes` gives
 07809:         # the same levels the names the export writes them under.
+07810:         _dataframe_may_import_deps()
    __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7810, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+07811:         if not isinstance(frame.index, _PANDAS.RangeIndex):
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7811, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PANDAS, __pyx_mstate_global->__pyx_n_u_RangeIndex); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7811, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = PyObject_IsInstance(__pyx_t_2, __pyx_t_4); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 7811, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_6 = (!__pyx_t_1);
    if (__pyx_t_6) {
/* … */
    }
+07812:             names.extend(frame.index.names)
      if (unlikely(__pyx_v_names == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "extend");
        __PYX_ERR(0, 7812, __pyx_L1_error)
      }
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_index); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7812, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_names); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7812, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_7 = __Pyx_PyList_Extend(__pyx_v_names, __pyx_t_2); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 7812, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+07813:         return names
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_names);
    __pyx_r = __pyx_v_names;
    goto __pyx_L0;
+07814:     if _try_import_polars():
  __pyx_t_6 = __pyx_f_7questdb_7_client__try_import_polars(); if (unlikely(__pyx_t_6 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 7814, __pyx_L1_error)
  if (__pyx_t_6) {
/* … */
  }
+07815:         if isinstance(frame, _POLARS_DATAFRAME_T):
    __pyx_t_2 = __pyx_v_7questdb_7_client__POLARS_DATAFRAME_T;
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_6 = PyObject_IsInstance(__pyx_v_frame, __pyx_t_2); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 7815, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_6) {
/* … */
    }
+07816:             return frame.columns
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7816, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_r = __pyx_t_2;
      __pyx_t_2 = 0;
      goto __pyx_L0;
+07817:         if isinstance(frame, _POLARS_SERIES_T):
    __pyx_t_2 = __pyx_v_7questdb_7_client__POLARS_SERIES_T;
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_6 = PyObject_IsInstance(__pyx_v_frame, __pyx_t_2); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 7817, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_6) {
/* … */
    }
+07818:             return [frame.name]
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7818, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7818, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_2);
      if (__Pyx_PyList_SET_ITEM(__pyx_t_4, 0, __pyx_t_2) != (0)) __PYX_ERR(0, 7818, __pyx_L1_error);
      __pyx_t_2 = 0;
      __pyx_r = __pyx_t_4;
      __pyx_t_4 = 0;
      goto __pyx_L0;
+07819:     if _PYARROW is None and sys.modules.get('pyarrow') is None:
  __pyx_t_1 = (__pyx_v_7questdb_7_client__PYARROW == Py_None);
  if (__pyx_t_1) {
  } else {
    __pyx_t_6 = __pyx_t_1;
    goto __pyx_L9_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_sys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7819, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_modules); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7819, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_2 = __pyx_t_8;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_n_u_pyarrow};
    __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_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7819, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_t_1 = (__pyx_t_4 == Py_None);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_6 = __pyx_t_1;
  __pyx_L9_bool_binop_done:;
  if (__pyx_t_6) {
/* … */
  }
 07820:         # A pyarrow object exists only once pyarrow is imported.
+07821:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+07822:     _dataframe_require_pyarrow()
  __pyx_t_4 = __pyx_f_7questdb_7_client__dataframe_require_pyarrow(); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7822, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+07823:     if isinstance(frame, (_PYARROW.Table, _PYARROW.RecordBatch,
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_Table); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7823, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_RecordBatch); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7823, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
/* … */
  __pyx_t_1 = PyObject_IsInstance(__pyx_v_frame, __pyx_t_4); 
  if (!__pyx_t_1) {
  } else {
    __pyx_t_6 = __pyx_t_1;
    goto __pyx_L12_bool_binop_done;
  }
  __pyx_t_1 = PyObject_IsInstance(__pyx_v_frame, __pyx_t_8); 
  if (!__pyx_t_1) {
  } else {
    __pyx_t_6 = __pyx_t_1;
    goto __pyx_L12_bool_binop_done;
  }
/* … */
  if (__pyx_t_6) {
/* … */
  }
+07824:                           _PYARROW.RecordBatchReader)):
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_RecordBatchReader); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7824, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
/* … */
  __pyx_t_1 = PyObject_IsInstance(__pyx_v_frame, __pyx_t_2); 
  __pyx_t_6 = __pyx_t_1;
  __pyx_L12_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+07825:         return frame.schema.names
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7825, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_names); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7825, __pyx_L1_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_L0;
+07826:     return None
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
 07827: 
 07828: 
+07829: cdef object _pandas_export_dtypes(object df, object dtypes):
static PyObject *__pyx_f_7questdb_7_client__pandas_export_dtypes(PyObject *__pyx_v_df, PyObject *__pyx_v_dtypes) {
  PyObject *__pyx_v_index = 0;
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_v_taken = 0;
  PyObject *__pyx_v_names = 0;
  PyObject *__pyx_v_level_dtypes = 0;
  Py_ssize_t __pyx_v_i;
  Py_ssize_t __pyx_v_j;
  PyObject *__pyx_9genexpr21__pyx_v_label = 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_11);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("questdb._client._pandas_export_dtypes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_index);
  __Pyx_XDECREF(__pyx_v_name);
  __Pyx_XDECREF(__pyx_v_taken);
  __Pyx_XDECREF(__pyx_v_names);
  __Pyx_XDECREF(__pyx_v_level_dtypes);
  __Pyx_XDECREF(__pyx_9genexpr21__pyx_v_label);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 07830:     """`dtypes`, the frame's `df.dtypes`, extended with the dtype of each
 07831:     index level the frame's Arrow export writes as a column.
 07832: 
 07833:     pyarrow's pandas conversion writes every level of an index other
 07834:     than a RangeIndex as a column. It names the column after the level,
 07835:     converted to a string, unless the level has no name or its name is
 07836:     already taken; then it takes the first free `__index_level_{j}__`,
 07837:     counting from the level's position. A check that judges exported
 07838:     columns by their pandas dtype needs those columns too, or an index
 07839:     level escapes it. None when `dtypes` is None.
 07840: 
 07841:     The rule is the one current pyarrow applies. Older pyarrow does not
 07842:     skip a `__index_level_{j}__` that a data column already holds, so the
 07843:     two disagree only on a frame with a data column of that name: the
 07844:     level is then refused under another name, or its claim is not
 07845:     found. `_arrow_source_column_names` lists the same levels under
 07846:     their own names, which is what the NUL-name check reads."""
 07847:     cdef object index
 07848:     cdef object name
 07849:     cdef list taken
+07850:     cdef list names = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7850, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_names = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 07851:     cdef list level_dtypes
 07852:     cdef Py_ssize_t i
 07853:     cdef Py_ssize_t j
+07854:     if dtypes is None:
  __pyx_t_2 = (__pyx_v_dtypes == Py_None);
  if (__pyx_t_2) {
/* … */
  }
+07855:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+07856:     index = df.index
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_index); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7856, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_index = __pyx_t_1;
  __pyx_t_1 = 0;
+07857:     if isinstance(index, _PANDAS.RangeIndex):
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PANDAS, __pyx_mstate_global->__pyx_n_u_RangeIndex); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7857, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_index, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 7857, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+07858:         return dtypes
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_dtypes);
    __pyx_r = __pyx_v_dtypes;
    goto __pyx_L0;
 07859:     # Each level's dtype, read from the index's metadata rather than
 07860:     # from its materialized values.
+07861:     if isinstance(index, _PANDAS.MultiIndex):
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PANDAS, __pyx_mstate_global->__pyx_n_u_MultiIndex); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7861, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_index, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 7861, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L5;
  }
+07862:         level_dtypes = list(index.dtypes)
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_mstate_global->__pyx_n_u_dtypes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7862, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PySequence_ListKeepNew(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7862, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_level_dtypes = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
 07863:     else:
+07864:         level_dtypes = [index.dtype]
  /*else*/ {
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7864, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7864, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_3);
    if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_3) != (0)) __PYX_ERR(0, 7864, __pyx_L1_error);
    __pyx_t_3 = 0;
    __pyx_v_level_dtypes = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
  }
  __pyx_L5:;
+07865:     taken = [_arrow_export_name(label) for label in df.columns]
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7865, __pyx_L8_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7865, __pyx_L8_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) {
      __pyx_t_4 = __pyx_t_3; __Pyx_INCREF(__pyx_t_4);
      __pyx_t_5 = 0;
      __pyx_t_6 = NULL;
    } else {
      __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7865, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_6 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7865, __pyx_L8_error)
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    for (;;) {
      if (likely(!__pyx_t_6)) {
        if (likely(PyList_CheckExact(__pyx_t_4))) {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4);
            #if !CYTHON_ASSUME_SAFE_SIZE
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7865, __pyx_L8_error)
            #endif
            if (__pyx_t_5 >= __pyx_temp) break;
          }
          __pyx_t_3 = __Pyx_PyList_GetItemRefFast(__pyx_t_4, __pyx_t_5, __Pyx_ReferenceSharing_OwnStrongReference);
          ++__pyx_t_5;
        } else {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_4);
            #if !CYTHON_ASSUME_SAFE_SIZE
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7865, __pyx_L8_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_4, __pyx_t_5));
          #else
          __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_5);
          #endif
          ++__pyx_t_5;
        }
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7865, __pyx_L8_error)
      } else {
        __pyx_t_3 = __pyx_t_6(__pyx_t_4);
        if (unlikely(!__pyx_t_3)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 7865, __pyx_L8_error)
            PyErr_Clear();
          }
          break;
        }
      }
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_XDECREF_SET(__pyx_9genexpr21__pyx_v_label, __pyx_t_3);
      __pyx_t_3 = 0;
      __pyx_t_3 = __pyx_f_7questdb_7_client__arrow_export_name(__pyx_9genexpr21__pyx_v_label); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7865, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 7865, __pyx_L8_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_9genexpr21__pyx_v_label); __pyx_9genexpr21__pyx_v_label = 0;
    goto __pyx_L12_exit_scope;
    __pyx_L8_error:;
    __Pyx_XDECREF(__pyx_9genexpr21__pyx_v_label); __pyx_9genexpr21__pyx_v_label = 0;
    goto __pyx_L1_error;
    __pyx_L12_exit_scope:;
  } /* exit inner scope */
  __pyx_v_taken = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+07866:     for i, name in enumerate(index.names):
  __pyx_t_5 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_mstate_global->__pyx_n_u_names); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7866, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
    __pyx_t_4 = __pyx_t_1; __Pyx_INCREF(__pyx_t_4);
    __pyx_t_7 = 0;
    __pyx_t_6 = NULL;
  } else {
    __pyx_t_7 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7866, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7866, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    if (likely(!__pyx_t_6)) {
      if (likely(PyList_CheckExact(__pyx_t_4))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7866, __pyx_L1_error)
          #endif
          if (__pyx_t_7 >= __pyx_temp) break;
        }
        __pyx_t_1 = __Pyx_PyList_GetItemRefFast(__pyx_t_4, __pyx_t_7, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_7;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_4);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7866, __pyx_L1_error)
          #endif
          if (__pyx_t_7 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_7));
        #else
        __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_7);
        #endif
        ++__pyx_t_7;
      }
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7866, __pyx_L1_error)
    } else {
      __pyx_t_1 = __pyx_t_6(__pyx_t_4);
      if (unlikely(!__pyx_t_1)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 7866, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_v_i = __pyx_t_5;
    __pyx_t_5 = (__pyx_t_5 + 1);
/* … */
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 07867:         # pyarrow compares the level's own name with the converted
 07868:         # names, as here.
+07869:         if name is None or name in taken:
    __pyx_t_8 = (__pyx_v_name == Py_None);
    if (!__pyx_t_8) {
    } else {
      __pyx_t_2 = __pyx_t_8;
      goto __pyx_L16_bool_binop_done;
    }
    __pyx_t_8 = (__Pyx_PySequence_ContainsTF(__pyx_v_name, __pyx_v_taken, Py_EQ)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 7869, __pyx_L1_error)
    __pyx_t_2 = __pyx_t_8;
    __pyx_L16_bool_binop_done:;
    if (__pyx_t_2) {
/* … */
      goto __pyx_L15;
    }
+07870:             j = i
      __pyx_v_j = __pyx_v_i;
+07871:             while f'__index_level_{j}__' in taken:
      while (1) {
        __pyx_t_1 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_j, 0, ' ', 'd'); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7871, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_9[0] = __pyx_mstate_global->__pyx_n_u_index_level;
        __pyx_t_9[1] = __pyx_t_1;
        __pyx_t_9[2] = __pyx_mstate_global->__pyx_n_u__33;
        __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_9, 3, 14 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1) + 2, 127);
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7871, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_3, __pyx_v_taken, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7871, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (!__pyx_t_2) break;
+07872:                 j += 1
        __pyx_v_j = (__pyx_v_j + 1);
      }
+07873:             name = f'__index_level_{j}__'
      __pyx_t_3 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_j, 0, ' ', 'd'); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7873, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_9[0] = __pyx_mstate_global->__pyx_n_u_index_level;
      __pyx_t_9[1] = __pyx_t_3;
      __pyx_t_9[2] = __pyx_mstate_global->__pyx_n_u__33;
      __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_9, 3, 14 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + 2, 127);
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7873, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
      __pyx_t_1 = 0;
 07874:         else:
+07875:             name = _arrow_export_name(name)
    /*else*/ {
      __pyx_t_1 = __pyx_f_7questdb_7_client__arrow_export_name(__pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7875, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
      __pyx_t_1 = 0;
    }
    __pyx_L15:;
+07876:         taken.append(name)
    __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_taken, __pyx_v_name); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 7876, __pyx_L1_error)
+07877:         names.append(name)
    __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_names, __pyx_v_name); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 7877, __pyx_L1_error)
+07878:     return _PANDAS.concat([
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_v_7questdb_7_client__PANDAS;
  __Pyx_INCREF(__pyx_t_1);
/* … */
  __pyx_t_13 = PyList_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 7878, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_INCREF(__pyx_v_dtypes);
  __Pyx_GIVEREF(__pyx_v_dtypes);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_13, 0, __pyx_v_dtypes) != (0)) __PYX_ERR(0, 7878, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_3);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_13, 1, __pyx_t_3) != (0)) __PYX_ERR(0, 7878, __pyx_L1_error);
  __pyx_t_3 = 0;
  __pyx_t_12 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_13};
    __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_concat, __pyx_callargs+__pyx_t_12, (2-__pyx_t_12) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7878, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
+07879:         dtypes, _PANDAS.Series(level_dtypes, index=names, dtype=object)])
  __pyx_t_11 = __pyx_v_7questdb_7_client__PANDAS;
  __Pyx_INCREF(__pyx_t_11);
  __pyx_t_12 = 0;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 2 : 0)] = {__pyx_t_11, __pyx_v_level_dtypes};
    __pyx_t_13 = __Pyx_MakeVectorcallBuilderKwds(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 7879, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_index, __pyx_v_names, __pyx_t_13, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 7879, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_builtin_object, __pyx_t_13, __pyx_callargs+2, 1) < (0)) __PYX_ERR(0, 7879, __pyx_L1_error)
    __pyx_t_3 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_Series, __pyx_callargs+__pyx_t_12, (2-__pyx_t_12) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_13);
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7879, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
 07880: 
 07881: 
+07882: cdef object _arrow_export_name(object label):
static PyObject *__pyx_f_7questdb_7_client__arrow_export_name(PyObject *__pyx_v_label) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._arrow_export_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 07883:     """The column name pyarrow's pandas conversion gives `label`.
 07884: 
 07885:     `str()` matches pyarrow for every label but a tuple with parts that
 07886:     are not strings. A tuple's name holds parentheses and quotes, which
 07887:     no QuestDB column name may, so such a frame is refused whatever name
 07888:     this returns."""
+07889:     if isinstance(label, str):
  __pyx_t_1 = PyUnicode_Check(__pyx_v_label); 
  if (__pyx_t_1) {
/* … */
  }
+07890:         return label
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_label);
    __pyx_r = __pyx_v_label;
    goto __pyx_L0;
+07891:     if isinstance(label, bytes):
  __pyx_t_1 = PyBytes_Check(__pyx_v_label); 
  if (__pyx_t_1) {
/* … */
  }
+07892:         return label.decode('utf-8')
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __pyx_v_label;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_utf_8};
      __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_decode, __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(0, 7892, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+07893:     return str(label)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_Unicode(__pyx_v_label); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7893, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 07894: 
 07895: 
+07896: cdef object _polars_struct_field_with_nul(object dtype):
static PyObject *__pyx_f_7questdb_7_client__polars_struct_field_with_nul(PyObject *__pyx_v_dtype) {
  PyObject *__pyx_v_field = 0;
  PyObject *__pyx_v_found = 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_6);
  __Pyx_AddTraceback("questdb._client._polars_struct_field_with_nul", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_field);
  __Pyx_XDECREF(__pyx_v_found);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 07897:     """The first struct field name inside polars `dtype`, at any depth,
 07898:     that holds a NUL; None when there is none."""
 07899:     cdef object field
 07900:     cdef object found
+07901:     if isinstance(dtype, _POLARS.Struct):
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_Struct); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7901, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 7901, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+07902:         for field in dtype.fields:
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_fields); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7902, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
      __pyx_t_3 = __pyx_t_1; __Pyx_INCREF(__pyx_t_3);
      __pyx_t_4 = 0;
      __pyx_t_5 = NULL;
    } else {
      __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7902, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7902, __pyx_L1_error)
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    for (;;) {
      if (likely(!__pyx_t_5)) {
        if (likely(PyList_CheckExact(__pyx_t_3))) {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3);
            #if !CYTHON_ASSUME_SAFE_SIZE
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7902, __pyx_L1_error)
            #endif
            if (__pyx_t_4 >= __pyx_temp) break;
          }
          __pyx_t_1 = __Pyx_PyList_GetItemRefFast(__pyx_t_3, __pyx_t_4, __Pyx_ReferenceSharing_OwnStrongReference);
          ++__pyx_t_4;
        } else {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3);
            #if !CYTHON_ASSUME_SAFE_SIZE
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7902, __pyx_L1_error)
            #endif
            if (__pyx_t_4 >= __pyx_temp) break;
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4));
          #else
          __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_4);
          #endif
          ++__pyx_t_4;
        }
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7902, __pyx_L1_error)
      } else {
        __pyx_t_1 = __pyx_t_5(__pyx_t_3);
        if (unlikely(!__pyx_t_1)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 7902, __pyx_L1_error)
            PyErr_Clear();
          }
          break;
        }
      }
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_field, __pyx_t_1);
      __pyx_t_1 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+07903:             if '\0' in field.name:
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7903, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_mstate_global->__pyx_kp_u__34, __pyx_t_1, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 7903, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (__pyx_t_2) {
/* … */
      }
+07904:                 return field.name
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7904, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_r = __pyx_t_1;
        __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        goto __pyx_L0;
+07905:             found = _polars_struct_field_with_nul(field.dtype)
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7905, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_6 = __pyx_f_7questdb_7_client__polars_struct_field_with_nul(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7905, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF_SET(__pyx_v_found, __pyx_t_6);
      __pyx_t_6 = 0;
+07906:             if found is not None:
      __pyx_t_2 = (__pyx_v_found != Py_None);
      if (__pyx_t_2) {
/* … */
      }
+07907:                 return found
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_v_found);
        __pyx_r = __pyx_v_found;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        goto __pyx_L0;
+07908:     elif isinstance(dtype, (_POLARS.List, _POLARS.Array)):
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_List); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7908, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_Array); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7908, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_3); 
  if (!__pyx_t_7) {
  } else {
    __pyx_t_2 = __pyx_t_7;
    goto __pyx_L9_bool_binop_done;
  }
  __pyx_t_7 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_6); 
  __pyx_t_2 = __pyx_t_7;
  __pyx_L9_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_2) {
/* … */
  }
  __pyx_L3:;
+07909:         return _polars_struct_field_with_nul(dtype.inner)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_inner); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7909, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = __pyx_f_7questdb_7_client__polars_struct_field_with_nul(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7909, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    goto __pyx_L0;
+07910:     return None
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
 07911: 
 07912: 
+07913: cdef void_int _reject_nul_column_names(object frame) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__reject_nul_column_names(PyObject *__pyx_v_frame) {
  PyObject *__pyx_v_names = 0;
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_v_dtype = 0;
  PyObject *__pyx_v_dtypes = 0;
  PyObject *__pyx_v_field = 0;
  Py_ssize_t __pyx_v_i;
  struct qdb_pystr_buf *__pyx_v_b;
  struct line_sender_column_name __pyx_v_c_name;
  __pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
  /* 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_21);
  __Pyx_XDECREF(__pyx_t_22);
  __Pyx_XDECREF(__pyx_t_23);
  __Pyx_XDECREF(__pyx_t_24);
  __Pyx_XDECREF(__pyx_t_26);
  __Pyx_AddTraceback("questdb._client._reject_nul_column_names", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_names);
  __Pyx_XDECREF(__pyx_v_name);
  __Pyx_XDECREF(__pyx_v_dtype);
  __Pyx_XDECREF(__pyx_v_dtypes);
  __Pyx_XDECREF(__pyx_v_field);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 07914:     """The Arrow C Data Interface carries each name as a NUL-terminated
 07915:     string. pyarrow, and pandas through it, cut a name holding a NUL at
 07916:     the NUL on export, so its column would land under the shorter name.
 07917:     polars panics on such a name, struct field names included, and the
 07918:     process aborts, whether the name belongs to a DataFrame column or to
 07919:     a Series. The names are checked here, before the export: a column
 07920:     name is refused with the error `row()` raises for it, and a polars
 07921:     struct field name with a BadDataFrame error."""
+07922:     cdef object names = _arrow_source_column_names(frame)
  __pyx_t_1 = __pyx_f_7questdb_7_client__arrow_source_column_names(__pyx_v_frame); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_names = __pyx_t_1;
  __pyx_t_1 = 0;
 07923:     cdef object name
 07924:     cdef object dtype
 07925:     cdef object dtypes
 07926:     cdef object field
 07927:     cdef Py_ssize_t i
 07928:     cdef qdb_pystr_buf* b
 07929:     cdef line_sender_column_name c_name
+07930:     if names is None:
  __pyx_t_2 = (__pyx_v_names == Py_None);
  if (__pyx_t_2) {
/* … */
  }
+07931:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
+07932:     for name in names:
  if (likely(PyList_CheckExact(__pyx_v_names)) || PyTuple_CheckExact(__pyx_v_names)) {
    __pyx_t_1 = __pyx_v_names; __Pyx_INCREF(__pyx_t_1);
    __pyx_t_3 = 0;
    __pyx_t_4 = NULL;
  } else {
    __pyx_t_3 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_names); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7932, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7932, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_4)) {
      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(0, 7932, __pyx_L1_error)
          #endif
          if (__pyx_t_3 >= __pyx_temp) break;
        }
        __pyx_t_5 = __Pyx_PyList_GetItemRefFast(__pyx_t_1, __pyx_t_3, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_3;
      } 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(0, 7932, __pyx_L1_error)
          #endif
          if (__pyx_t_3 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_5 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_3));
        #else
        __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_3);
        #endif
        ++__pyx_t_3;
      }
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7932, __pyx_L1_error)
    } else {
      __pyx_t_5 = __pyx_t_4(__pyx_t_1);
      if (unlikely(!__pyx_t_5)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 7932, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_5);
    __pyx_t_5 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+07933:         if isinstance(name, bytes):
    __pyx_t_2 = PyBytes_Check(__pyx_v_name); 
    if (__pyx_t_2) {
/* … */
    }
 07934:             # pyarrow writes a bytes label decoded as UTF-8.
+07935:             name = name.decode('utf-8', 'replace')
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_mstate_global->__pyx_n_u_decode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7935, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_mstate_global->__pyx_tuple[2], NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7935, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_6);
      __pyx_t_6 = 0;
+07936:         if isinstance(name, str) and '\0' in name:
    __pyx_t_7 = PyUnicode_Check(__pyx_v_name); 
    if (__pyx_t_7) {
    } else {
      __pyx_t_2 = __pyx_t_7;
      goto __pyx_L8_bool_binop_done;
    }
    __pyx_t_7 = (__Pyx_PySequence_ContainsTF(__pyx_mstate_global->__pyx_kp_u__34, __pyx_v_name, Py_EQ)); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 7936, __pyx_L1_error)
    __pyx_t_2 = __pyx_t_7;
    __pyx_L8_bool_binop_done:;
    if (__pyx_t_2) {
/* … */
    }
+07937:             b = qdb_pystr_buf_new()
      __pyx_v_b = qdb_pystr_buf_new();
+07938:             try:
      /*try:*/ {
 07939:                 # Raises: a column name can't contain '\0'.
+07940:                 str_to_column_name(b, str(name), &c_name)
        __pyx_t_6 = __Pyx_PyObject_Unicode(__pyx_v_name); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7940, __pyx_L13_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_8 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_v_b, ((PyObject*)__pyx_t_6), (&__pyx_v_c_name)); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 7940, __pyx_L13_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      }
 07941:             finally:
+07942:                 qdb_pystr_buf_free(b)
      /*finally:*/ {
        /*normal exit:*/{
          qdb_pystr_buf_free(__pyx_v_b);
          goto __pyx_L14;
        }
        __pyx_L13_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
           __Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
          if ( unlikely(__Pyx_GetException(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14) < 0)) __Pyx_ErrFetch(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
          __Pyx_XGOTREF(__pyx_t_12);
          __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_t_9 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_11 = __pyx_filename;
          {
            qdb_pystr_buf_free(__pyx_v_b);
          }
          __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_XGIVEREF(__pyx_t_12);
          __Pyx_XGIVEREF(__pyx_t_13);
          __Pyx_XGIVEREF(__pyx_t_14);
          __Pyx_ErrRestore(__pyx_t_12, __pyx_t_13, __pyx_t_14);
          __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
          __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_11;
          goto __pyx_L1_error;
        }
        __pyx_L14:;
      }
+07943:     if _POLARS is not None and isinstance(
  __pyx_t_7 = (__pyx_v_7questdb_7_client__POLARS != Py_None);
  if (__pyx_t_7) {
  } else {
    __pyx_t_2 = __pyx_t_7;
    goto __pyx_L21_bool_binop_done;
  }
/* … */
  if (__pyx_t_2) {
/* … */
  }
+07944:             frame, (_POLARS_DATAFRAME_T, _POLARS_SERIES_T)):
  __Pyx_INCREF(__pyx_v_7questdb_7_client__POLARS_DATAFRAME_T);
  __pyx_t_1 = __pyx_v_7questdb_7_client__POLARS_DATAFRAME_T;
  __Pyx_INCREF(__pyx_v_7questdb_7_client__POLARS_SERIES_T);
  __pyx_t_6 = __pyx_v_7questdb_7_client__POLARS_SERIES_T;
/* … */
  __pyx_t_18 = PyObject_IsInstance(__pyx_v_frame, __pyx_t_1); 
  if (!__pyx_t_18) {
  } else {
    __pyx_t_7 = __pyx_t_18;
    goto __pyx_L23_bool_binop_done;
  }
/* … */
  __pyx_t_18 = PyObject_IsInstance(__pyx_v_frame, __pyx_t_6); 
  __pyx_t_7 = __pyx_t_18;
  __pyx_L23_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_2 = __pyx_t_7;
  __pyx_L21_bool_binop_done:;
 07945:         # `dtypes` is cheap to read, and `is_nested()` leaves the walk
 07946:         # to the rare nested column. `names` is in the same order:
 07947:         # `frame.columns` for a DataFrame, the Series' own name for a
 07948:         # Series.
+07949:         if isinstance(frame, _POLARS_DATAFRAME_T):
    __pyx_t_1 = __pyx_v_7questdb_7_client__POLARS_DATAFRAME_T;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = PyObject_IsInstance(__pyx_v_frame, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 7949, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_2) {
/* … */
      goto __pyx_L25;
    }
+07950:             dtypes = frame.dtypes
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_dtypes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7950, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_v_dtypes = __pyx_t_1;
      __pyx_t_1 = 0;
 07951:         else:
+07952:             dtypes = [frame.dtype]
    /*else*/ {
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7952, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_6 = PyList_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7952, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_1);
      if (__Pyx_PyList_SET_ITEM(__pyx_t_6, 0, __pyx_t_1) != (0)) __PYX_ERR(0, 7952, __pyx_L1_error);
      __pyx_t_1 = 0;
      __pyx_v_dtypes = __pyx_t_6;
      __pyx_t_6 = 0;
    }
    __pyx_L25:;
+07953:         for i, dtype in enumerate(dtypes):
    __pyx_t_3 = 0;
    if (likely(PyList_CheckExact(__pyx_v_dtypes)) || PyTuple_CheckExact(__pyx_v_dtypes)) {
      __pyx_t_6 = __pyx_v_dtypes; __Pyx_INCREF(__pyx_t_6);
      __pyx_t_19 = 0;
      __pyx_t_4 = NULL;
    } else {
      __pyx_t_19 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_v_dtypes); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7953, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7953, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_4)) {
        if (likely(PyList_CheckExact(__pyx_t_6))) {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_6);
            #if !CYTHON_ASSUME_SAFE_SIZE
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7953, __pyx_L1_error)
            #endif
            if (__pyx_t_19 >= __pyx_temp) break;
          }
          __pyx_t_1 = __Pyx_PyList_GetItemRefFast(__pyx_t_6, __pyx_t_19, __Pyx_ReferenceSharing_OwnStrongReference);
          ++__pyx_t_19;
        } else {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_6);
            #if !CYTHON_ASSUME_SAFE_SIZE
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 7953, __pyx_L1_error)
            #endif
            if (__pyx_t_19 >= __pyx_temp) break;
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_19));
          #else
          __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_6, __pyx_t_19);
          #endif
          ++__pyx_t_19;
        }
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7953, __pyx_L1_error)
      } else {
        __pyx_t_1 = __pyx_t_4(__pyx_t_6);
        if (unlikely(!__pyx_t_1)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 7953, __pyx_L1_error)
            PyErr_Clear();
          }
          break;
        }
      }
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_1);
      __pyx_t_1 = 0;
      __pyx_v_i = __pyx_t_3;
      __pyx_t_3 = (__pyx_t_3 + 1);
/* … */
      __pyx_L26_continue:;
    }
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+07954:             if not dtype.is_nested():
      __pyx_t_5 = __pyx_v_dtype;
      __Pyx_INCREF(__pyx_t_5);
      __pyx_t_20 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
        __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_nested, __pyx_callargs+__pyx_t_20, (1-__pyx_t_20) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7954, __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(0, 7954, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_7 = (!__pyx_t_2);
      if (__pyx_t_7) {
/* … */
      }
+07955:                 continue
        goto __pyx_L26_continue;
+07956:             field = _polars_struct_field_with_nul(dtype)
      __pyx_t_1 = __pyx_f_7questdb_7_client__polars_struct_field_with_nul(__pyx_v_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7956, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_field, __pyx_t_1);
      __pyx_t_1 = 0;
+07957:             if field is not None:
      __pyx_t_7 = (__pyx_v_field != Py_None);
      if (unlikely(__pyx_t_7)) {
/* … */
      }
+07958:                 raise QuestDBError(
        __pyx_t_5 = NULL;
        __Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 7958, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_21);
+07959:                     QuestDBErrorCode.BadDataFrame,
        __Pyx_GetModuleGlobalName(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 7959, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_22);
        __pyx_t_23 = __Pyx_PyObject_GetAttrStr(__pyx_t_22, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 7959, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_23);
        __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
+07960:                     f'Bad column {names[i]!r}: struct field name '
        __pyx_t_22 = __Pyx_GetItemInt(__pyx_v_names, __pyx_v_i, Py_ssize_t, 1, PyLong_FromSsize_t, 0, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 7960, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_22);
        __pyx_t_24 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_t_22), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 7960, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_24);
        __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
/* … */
        __pyx_t_26 = __Pyx_PyUnicode_Join(__pyx_t_25, 5, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_24) + 20 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_22) + 61, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_24) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_22));
        if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 7960, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_26);
        __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
        __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
        __pyx_t_20 = 1;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_21))) {
          __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_21);
          assert(__pyx_t_5);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_21);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_21, __pyx__function);
          __pyx_t_20 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_23, __pyx_t_26};
          __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_21, __pyx_callargs+__pyx_t_20, (3-__pyx_t_20) | (__pyx_t_20*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
          __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
          __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7958, __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(0, 7958, __pyx_L1_error)
+07961:                     f"{field!r} contains a NUL character ('\\0'), which "
        __pyx_t_22 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_field), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 7961, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_22);
        __pyx_t_25[0] = __pyx_mstate_global->__pyx_kp_u_Bad_column;
        __pyx_t_25[1] = __pyx_t_24;
        __pyx_t_25[2] = __pyx_mstate_global->__pyx_kp_u_struct_field_name;
        __pyx_t_25[3] = __pyx_t_22;
        __pyx_t_25[4] = __pyx_mstate_global->__pyx_kp_u_contains_a_NUL_character_0_whic;
 07962:                     f'polars cannot export.')
+07963:     return 0
  __pyx_r = 0;
  goto __pyx_L0;
 07964: 
 07965: 
 07966: 
 07967: 
+07968: cdef void_int _capsule_consume_stream(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__capsule_consume_stream(struct qwp_direct_sender *__pyx_v_conn, PyObject *__pyx_v_stream_owner, struct line_sender_table_name __pyx_v_c_table_name, struct line_sender_column_name *__pyx_v_c_ts_column_ptr, int __pyx_v_at_scalar_set, int64_t __pyx_v_at_scalar_nanos, struct ArrowSchema *__pyx_v_c_schema, struct qwp_arrow_override const *__pyx_v_c_overrides, size_t __pyx_v_c_overrides_len, int *__pyx_v_any_flushed, size_t *__pyx_v_deferred_since_sync, int *__pyx_v_may_have_committed_prefix, PyObject *__pyx_v_binary_names, PyObject *__pyx_v_unlabelled) {
  PyObject *__pyx_v_stream_capsule = 0;
  struct ArrowArrayStream *__pyx_v_stream;
  struct ArrowArray __pyx_v_batch;
  int __pyx_v_rc;
  char const *__pyx_v_stream_err;
  __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_1);
  __Pyx_XDECREF(__pyx_t_2);
  __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_AddTraceback("questdb._client._capsule_consume_stream", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_stream_capsule);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 07969:         qwp_direct_sender* conn,
 07970:         object stream_owner,
 07971:         line_sender_table_name c_table_name,
 07972:         line_sender_column_name* c_ts_column_ptr,
 07973:         bint at_scalar_set,
 07974:         int64_t at_scalar_nanos,
 07975:         ArrowSchema* c_schema,
 07976:         const qwp_arrow_override* c_overrides,
 07977:         size_t c_overrides_len,
 07978:         bint* any_flushed,
 07979:         size_t* deferred_since_sync,
 07980:         bint* may_have_committed_prefix,
 07981:         object binary_names,
 07982:         object unlabelled) except -1:
 07983:     # `c_schema` is in/out and owned by the caller: zero-init on first
 07984:     # call (this function populates it via get_schema), reused as-is on
 07985:     # subsequent calls (Arrow C Data Interface guarantees slices of the
 07986:     # same source share schema), and released by the caller.
+07987:     cdef object stream_capsule = stream_owner.__arrow_c_stream__()
  __pyx_t_2 = __pyx_v_stream_owner;
  __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_arrow_c_stream_2, __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(0, 7987, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_stream_capsule = __pyx_t_1;
  __pyx_t_1 = 0;
+07988:     if not PyCapsule_IsValid(stream_capsule, b'arrow_array_stream'):
  __pyx_t_4 = (!PyCapsule_IsValid(__pyx_v_stream_capsule, __pyx_k_arrow_array_stream));
  if (unlikely(__pyx_t_4)) {
/* … */
  }
+07989:         raise TypeError(
    __pyx_t_2 = NULL;
    __pyx_t_3 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_arrow_c_stream___did_not_retur};
      __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(0, 7989, __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(0, 7989, __pyx_L1_error)
 07990:             '__arrow_c_stream__ did not return a valid arrow_array_stream '
 07991:             'PyCapsule.')
+07992:     cdef ArrowArrayStream* stream = <ArrowArrayStream*>PyCapsule_GetPointer(
  __pyx_t_5 = PyCapsule_GetPointer(__pyx_v_stream_capsule, __pyx_k_arrow_array_stream); if (unlikely(__pyx_t_5 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 7992, __pyx_L1_error)
  __pyx_v_stream = ((struct ArrowArrayStream *)__pyx_t_5);
 07993:         stream_capsule, b'arrow_array_stream')
 07994:     cdef ArrowArray batch
 07995:     cdef int rc
 07996:     cdef const char* stream_err
 07997: 
+07998:     if (stream == NULL or stream.get_schema == NULL or
  __pyx_t_6 = (__pyx_v_stream == NULL);
  if (!__pyx_t_6) {
  } else {
    __pyx_t_4 = __pyx_t_6;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_6 = (__pyx_v_stream->get_schema == NULL);
  if (!__pyx_t_6) {
  } else {
    __pyx_t_4 = __pyx_t_6;
    goto __pyx_L5_bool_binop_done;
  }
/* … */
  if (unlikely(__pyx_t_4)) {
/* … */
  }
+07999:             stream.get_next == NULL or stream.get_last_error == NULL):
  __pyx_t_6 = (__pyx_v_stream->get_next == NULL);
  if (!__pyx_t_6) {
  } else {
    __pyx_t_4 = __pyx_t_6;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_6 = (__pyx_v_stream->get_last_error == NULL);
  __pyx_t_4 = __pyx_t_6;
  __pyx_L5_bool_binop_done:;
+08000:         raise TypeError(
    __pyx_t_2 = NULL;
    __pyx_t_3 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_arrow_c_stream___returned_a_ma};
      __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(0, 8000, __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(0, 8000, __pyx_L1_error)
 08001:             '__arrow_c_stream__ returned a malformed arrow_array_stream '
 08002:             'PyCapsule with NULL callbacks.')
 08003: 
+08004:     if c_schema.release == NULL:
  __pyx_t_4 = (__pyx_v_c_schema->release == NULL);
  if (__pyx_t_4) {
/* … */
  }
+08005:         rc = stream.get_schema(stream, c_schema)
    __pyx_v_rc = __pyx_v_stream->get_schema(__pyx_v_stream, __pyx_v_c_schema);
+08006:         if rc != 0:
    __pyx_t_4 = (__pyx_v_rc != 0);
    if (unlikely(__pyx_t_4)) {
/* … */
    }
+08007:             stream_err = stream.get_last_error(stream)
      __pyx_v_stream_err = __pyx_v_stream->get_last_error(__pyx_v_stream);
+08008:             raise QuestDBError(
      __pyx_t_2 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8008, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
+08009:                 QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8009, __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(0, 8009, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+08010:                 f'Arrow stream get_schema failed: '
      __pyx_t_8 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_Arrow_stream_get_schema_failed, __pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8010, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_3 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_7))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7);
        assert(__pyx_t_2);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
        __pyx_t_3 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_9, __pyx_t_8};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __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_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(0, 8008, __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(0, 8008, __pyx_L1_error)
+08011:                 f'{stream_err.decode("utf-8", errors="replace") if stream_err != NULL else "unknown"}')
      __pyx_t_4 = (__pyx_v_stream_err != NULL);
      if (__pyx_t_4) {
        __pyx_t_12 = __Pyx_PyBytes_FromString(__pyx_v_stream_err); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8011, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_11 = __pyx_t_12;
        __Pyx_INCREF(__pyx_t_11);
        __pyx_t_3 = 0;
        {
          PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_11, __pyx_mstate_global->__pyx_kp_u_utf_8};
          __pyx_t_13 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 8011, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_13);
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_errors_2, __pyx_mstate_global->__pyx_n_u_replace, __pyx_t_13, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 8011, __pyx_L1_error)
          __pyx_t_10 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_decode, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_13);
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8011, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
        }
        __pyx_t_8 = __pyx_t_10;
        __pyx_t_10 = 0;
      } else {
        __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_unknown);
        __pyx_t_8 = __pyx_mstate_global->__pyx_n_u_unknown;
      }
      __pyx_t_10 = __Pyx_PyUnicode_Unicode(__pyx_t_8); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8011, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 08012:         # Before the first batch is read: every Arrow source reaches the
 08013:         # client through this one schema, so a polars `Object` column is
 08014:         # caught here however it was exported. The caller releases
 08015:         # `c_schema`.
+08016:         _refuse_fsb8_columns(c_schema)
    __pyx_t_14 = __pyx_f_7questdb_7_client__refuse_fsb8_columns(__pyx_v_c_schema); if (unlikely(__pyx_t_14 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 8016, __pyx_L1_error)
 08017:         # Once per call, since `c_schema` is fetched once and reused for
 08018:         # every slice. It only collects the unlabelled columns: the
 08019:         # caller reports them once the write is done
 08020:         # (`_log_unlabelled_fsb_columns`).
+08021:         _check_fsb_columns(
    __pyx_t_14 = __pyx_f_7questdb_7_client__check_fsb_columns(__pyx_v_c_schema, __pyx_v_c_overrides, __pyx_v_c_overrides_len, __pyx_v_binary_names, __pyx_v_unlabelled); if (unlikely(__pyx_t_14 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 8021, __pyx_L1_error)
 08022:             c_schema, c_overrides, c_overrides_len,
 08023:             binary_names, unlabelled)
 08024:         # Field metadata goes on to the native client unchanged, by
 08025:         # design. A `questdb.column_type` claim the field's Arrow type
 08026:         # cannot carry -- 'short' on int32, 'ipv4' on int64 -- makes the
 08027:         # native Arrow ingest refuse the write with ArrowIngest before
 08028:         # anything is sent. That refusal is the intended contract for
 08029:         # this route, and the client neither strips such a claim nor
 08030:         # turns the refusal into a log record.
 08031:         #
 08032:         # A `df.attrs['questdb']` claim that no longer fits is logged and
 08033:         # dropped instead (`_log_roundtrip_claim_dropped`), and the two
 08034:         # routes differ on purpose. Field metadata is the input contract
 08035:         # of the native Arrow ingest, which refuses such a field for
 08036:         # every language that uses it (c-questdb-client #186). A field
 08037:         # claim also goes stale only when the caller carries the old
 08038:         # field onto a new type -- `field.with_type(...)`, or a
 08039:         # permissive `pa.concat_tables` with the claimed table first --
 08040:         # whereas `df.attrs` belongs to the whole frame and survives
 08041:         # `astype` and arithmetic, so a stale claim there is the normal
 08042:         # case.
 08043:         #
 08044:         # `test_stale_arrow_field_claim_is_refused` pins this. Changing
 08045:         # it changes the public contract (`QuestDB.dataframe`,
 08046:         # docs/sender.rst, CHANGELOG); it is not a local fix.
 08047: 
+08048:     while True:
  while (1) {
+08049:         memset(&batch, 0, sizeof(ArrowArray))
    (void)(memset((&__pyx_v_batch), 0, (sizeof(struct ArrowArray))));
+08050:         rc = stream.get_next(stream, &batch)
    __pyx_v_rc = __pyx_v_stream->get_next(__pyx_v_stream, (&__pyx_v_batch));
+08051:         if rc != 0:
    __pyx_t_4 = (__pyx_v_rc != 0);
    if (unlikely(__pyx_t_4)) {
/* … */
    }
+08052:             stream_err = stream.get_last_error(stream)
      __pyx_v_stream_err = __pyx_v_stream->get_last_error(__pyx_v_stream);
+08053:             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(0, 8053, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
+08054:                 QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8054, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8054, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+08055:                 f'Arrow stream get_next failed: '
      __pyx_t_9 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_Arrow_stream_get_next_failed, __pyx_t_10); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8055, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_3 = 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_3 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_2, __pyx_t_9};
        __pyx_t_1 = __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_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8053, __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(0, 8053, __pyx_L1_error)
+08056:                 f'{stream_err.decode("utf-8", errors="replace") if stream_err != NULL else "unknown"}')
      __pyx_t_4 = (__pyx_v_stream_err != NULL);
      if (__pyx_t_4) {
        __pyx_t_13 = __Pyx_PyBytes_FromString(__pyx_v_stream_err); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 8056, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_13);
        __pyx_t_12 = __pyx_t_13;
        __Pyx_INCREF(__pyx_t_12);
        __pyx_t_3 = 0;
        {
          PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_12, __pyx_mstate_global->__pyx_kp_u_utf_8};
          __pyx_t_11 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8056, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_errors_2, __pyx_mstate_global->__pyx_n_u_replace, __pyx_t_11, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 8056, __pyx_L1_error)
          __pyx_t_10 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_decode, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_11);
          __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(0, 8056, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
        }
        __pyx_t_9 = __pyx_t_10;
        __pyx_t_10 = 0;
      } else {
        __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_unknown);
        __pyx_t_9 = __pyx_mstate_global->__pyx_n_u_unknown;
      }
      __pyx_t_10 = __Pyx_PyUnicode_Unicode(__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8056, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+08057:         if batch.release == NULL:
    __pyx_t_4 = (__pyx_v_batch.release == NULL);
    if (__pyx_t_4) {
/* … */
    }
+08058:             break
      goto __pyx_L12_break;
+08059:         try:
    /*try:*/ {
+08060:             if deferred_since_sync[0] >= _QWP_MAX_DEFERRED_ARROW_FRAMES:
      __pyx_t_4 = ((__pyx_v_deferred_since_sync[0]) >= __pyx_v_7questdb_7_client__QWP_MAX_DEFERRED_ARROW_FRAMES);
      if (__pyx_t_4) {
/* … */
      }
+08061:                 _dataframe_columnar_sync(conn)
        __pyx_t_14 = __pyx_f_7questdb_7_client__dataframe_columnar_sync(__pyx_v_conn); if (unlikely(__pyx_t_14 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 8061, __pyx_L18_error)
+08062:                 may_have_committed_prefix[0] = True
        (__pyx_v_may_have_committed_prefix[0]) = 1;
+08063:                 deferred_since_sync[0] = 0
        (__pyx_v_deferred_since_sync[0]) = 0;
+08064:             _dataframe_arrow_flush_batch(
      __pyx_t_14 = __pyx_f_7questdb_7_client__dataframe_arrow_flush_batch(__pyx_v_conn, __pyx_v_c_table_name, (&__pyx_v_batch), __pyx_v_c_schema, __pyx_v_c_ts_column_ptr, __pyx_v_at_scalar_set, __pyx_v_at_scalar_nanos, __pyx_v_c_overrides, __pyx_v_c_overrides_len, 1, __pyx_v_may_have_committed_prefix, __pyx_v_deferred_since_sync); if (unlikely(__pyx_t_14 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 8064, __pyx_L18_error)
 08065:                 conn, c_table_name, &batch, c_schema, c_ts_column_ptr,
 08066:                 at_scalar_set, at_scalar_nanos,
 08067:                 c_overrides, c_overrides_len,
 08068:                 True, may_have_committed_prefix,
 08069:                 deferred_since_sync)
+08070:             any_flushed[0] = True
      (__pyx_v_any_flushed[0]) = 1;
+08071:             deferred_since_sync[0] += 1
      __pyx_t_15 = 0;
      (__pyx_v_deferred_since_sync[__pyx_t_15]) = ((__pyx_v_deferred_since_sync[__pyx_t_15]) + 1);
    }
 08072:         finally:
+08073:             if batch.release != NULL:
    /*finally:*/ {
      /*normal exit:*/{
        __pyx_t_4 = (__pyx_v_batch.release != NULL);
        if (__pyx_t_4) {
/* … */
        }
        goto __pyx_L19;
      }
      __pyx_L18_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_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_2); __pyx_t_2 = 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_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_t_4 = (__pyx_v_batch.release != NULL);
          if (__pyx_t_4) {
/* … */
          }
        }
        __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_L1_error;
      }
      __pyx_L19:;
    }
  }
  __pyx_L12_break:;
+08074:                 batch.release(&batch)
          __pyx_v_batch.release((&__pyx_v_batch));
/* … */
            __pyx_v_batch.release((&__pyx_v_batch));
 08075: 
 08076: 
 08077: # `schema_overrides` kind `'binary'`. The native Arrow ingest has no such
 08078: # override: an unlabelled fixed-size binary column already lands as
 08079: # BINARY. The kind is a label for this client alone -- it keeps a pandas
 08080: # frame's 16- or 32-byte column from being refused, and a native one from
 08081: # being warned about -- so the capsule path takes it out of the list
 08082: # before building the native overrides array, and checks what the
 08083: # native side would otherwise have checked (`_check_fsb_columns`).
+08084: cdef int _SCHEMA_OVERRIDE_BINARY = -1
  __pyx_v_7questdb_7_client__SCHEMA_OVERRIDE_BINARY = -1;
 08085: 
 08086: 
+08087: cdef object _validate_schema_overrides(object schema_overrides):
static PyObject *__pyx_f_7questdb_7_client__validate_schema_overrides(PyObject *__pyx_v_schema_overrides) {
  PyObject *__pyx_v_out = 0;
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_v_override = 0;
  PyObject *__pyx_v_kind = 0;
  PyObject *__pyx_v_value = 0;
  PyObject *__pyx_v_bits = 0;
  int __pyx_v_kind_int;
  int __pyx_v_arg_int;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_AddTraceback("questdb._client._validate_schema_overrides", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_out);
  __Pyx_XDECREF(__pyx_v_name);
  __Pyx_XDECREF(__pyx_v_override);
  __Pyx_XDECREF(__pyx_v_kind);
  __Pyx_XDECREF(__pyx_v_value);
  __Pyx_XDECREF(__pyx_v_bits);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08088:     """Convert the public schema_overrides dict into a list of
 08089:     (name_bytes, kind_int, arg_int) tuples. Returns None if empty.
 08090: 
 08091:     Keeping `name_bytes` alive on the Python side lets the C overrides
 08092:     array borrow the underlying char* without an extra copy. A
 08093:     `'binary'` entry carries `_SCHEMA_OVERRIDE_BINARY`, which is not a
 08094:     native kind.
 08095:     """
+08096:     if not schema_overrides:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_schema_overrides); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 8096, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {
/* … */
  }
+08097:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+08098:     if not isinstance(schema_overrides, dict):
  __pyx_t_2 = PyDict_Check(__pyx_v_schema_overrides); 
  __pyx_t_1 = (!__pyx_t_2);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+08099:         raise TypeError(
    __pyx_t_4 = NULL;
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_schema_overrides_must_be_a_dict};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __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(0, 8099, __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(0, 8099, __pyx_L1_error)
 08100:             'schema_overrides must be a dict mapping column name to '
 08101:             "one of: 'symbol', 'ipv4', 'char', 'uuid', 'long256', "
 08102:             "'binary', or ('geohash', bits).")
+08103:     cdef list out = []
  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_out = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
 08104:     cdef object name, override, kind, value, bits
 08105:     cdef int kind_int
 08106:     cdef int arg_int
+08107:     for name, override in schema_overrides.items():
  __pyx_t_6 = 0;
  if (unlikely(__pyx_v_schema_overrides == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
    __PYX_ERR(0, 8107, __pyx_L1_error)
  }
  __pyx_t_4 = __Pyx_dict_iterator(__pyx_v_schema_overrides, 0, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_7), (&__pyx_t_8)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8107, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_3);
  __pyx_t_3 = __pyx_t_4;
  __pyx_t_4 = 0;
  while (1) {
    __pyx_t_10 = __Pyx_dict_iter_next(__pyx_t_3, __pyx_t_7, &__pyx_t_6, &__pyx_t_4, &__pyx_t_9, NULL, __pyx_t_8);
    if (unlikely(__pyx_t_10 == 0)) break;
    if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 8107, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_4);
    __pyx_t_4 = 0;
    __Pyx_XDECREF_SET(__pyx_v_override, __pyx_t_9);
    __pyx_t_9 = 0;
+08108:         if not isinstance(name, str):
    __pyx_t_1 = PyUnicode_Check(__pyx_v_name); 
    __pyx_t_2 = (!__pyx_t_1);
    if (unlikely(__pyx_t_2)) {
/* … */
    }
+08109:             raise TypeError(
      __pyx_t_4 = NULL;
+08110:                 f'schema_overrides key must be str, got '
      __pyx_t_11 = __Pyx_PyUnicode_Join(__pyx_t_13, 3, 38 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12));
      if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8110, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_5 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_11};
        __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __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_11); __pyx_t_11 = 0;
        if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8109, __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(0, 8109, __pyx_L1_error)
+08111:                 f'{type(name).__name__}.')
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_name)), __pyx_mstate_global->__pyx_n_u_name_2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8111, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_12 = __Pyx_PyObject_FormatSimple(__pyx_t_11, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8111, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_13[0] = __pyx_mstate_global->__pyx_kp_u_schema_overrides_key_must_be_str;
      __pyx_t_13[1] = __pyx_t_12;
      __pyx_t_13[2] = __pyx_mstate_global->__pyx_kp_u__2;
+08112:         if isinstance(override, str):
    __pyx_t_2 = PyUnicode_Check(__pyx_v_override); 
    if (__pyx_t_2) {
/* … */
      goto __pyx_L8;
    }
+08113:             kind = override
      __Pyx_INCREF(__pyx_v_override);
      __Pyx_XDECREF_SET(__pyx_v_kind, __pyx_v_override);
+08114:             value = None
      __Pyx_INCREF(Py_None);
      __Pyx_XDECREF_SET(__pyx_v_value, Py_None);
+08115:         elif isinstance(override, tuple) and len(override) == 2:
    __pyx_t_1 = PyTuple_Check(__pyx_v_override); 
    if (__pyx_t_1) {
    } else {
      __pyx_t_2 = __pyx_t_1;
      goto __pyx_L9_bool_binop_done;
    }
    __pyx_t_14 = PyObject_Length(__pyx_v_override); if (unlikely(__pyx_t_14 == ((Py_ssize_t)-1))) __PYX_ERR(0, 8115, __pyx_L1_error)
    __pyx_t_1 = (__pyx_t_14 == 2);
    __pyx_t_2 = __pyx_t_1;
    __pyx_L9_bool_binop_done:;
    if (likely(__pyx_t_2)) {
/* … */
      goto __pyx_L8;
    }
+08116:             kind, value = override
      if ((likely(PyTuple_CheckExact(__pyx_v_override))) || (PyList_CheckExact(__pyx_v_override))) {
        PyObject* sequence = __pyx_v_override;
        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(0, 8116, __pyx_L1_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0);
          __Pyx_INCREF(__pyx_t_9);
          __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1);
          __Pyx_INCREF(__pyx_t_11);
        } else {
          __pyx_t_9 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
          if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8116, __pyx_L1_error)
          __Pyx_XGOTREF(__pyx_t_9);
          __pyx_t_11 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
          if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8116, __pyx_L1_error)
          __Pyx_XGOTREF(__pyx_t_11);
        }
        #else
        __pyx_t_9 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8116, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_11 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8116, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        #endif
      } else {
        Py_ssize_t index = -1;
        __pyx_t_4 = PyObject_GetIter(__pyx_v_override); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8116, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_15 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4);
        index = 0; __pyx_t_9 = __pyx_t_15(__pyx_t_4); if (unlikely(!__pyx_t_9)) goto __pyx_L11_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_9);
        index = 1; __pyx_t_11 = __pyx_t_15(__pyx_t_4); if (unlikely(!__pyx_t_11)) goto __pyx_L11_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_11);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_15(__pyx_t_4), 2) < (0)) __PYX_ERR(0, 8116, __pyx_L1_error)
        __pyx_t_15 = NULL;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        goto __pyx_L12_unpacking_done;
        __pyx_L11_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_15 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(0, 8116, __pyx_L1_error)
        __pyx_L12_unpacking_done:;
      }
      __Pyx_XDECREF_SET(__pyx_v_kind, __pyx_t_9);
      __pyx_t_9 = 0;
      __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_11);
      __pyx_t_11 = 0;
 08117:         else:
+08118:             raise TypeError(
    /*else*/ {
      __pyx_t_9 = NULL;
+08119:                 f'schema_overrides[{name!r}] has invalid shape '
      __pyx_t_4 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8119, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
/* … */
      __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_16, 5, 17 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4) + 20 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12) + 38, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12));
      if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8119, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_17);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_5 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_17};
        __pyx_t_11 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
        if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8118, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
      }
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(0, 8118, __pyx_L1_error)
    }
    __pyx_L8:;
+08120:                 f'{override!r}; expected str or (kind, value) tuple.')
      __pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_override), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8120, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_16[0] = __pyx_mstate_global->__pyx_kp_u_schema_overrides;
      __pyx_t_16[1] = __pyx_t_4;
      __pyx_t_16[2] = __pyx_mstate_global->__pyx_kp_u_has_invalid_shape;
      __pyx_t_16[3] = __pyx_t_12;
      __pyx_t_16[4] = __pyx_mstate_global->__pyx_kp_u_expected_str_or_kind_value_tupl;
+08121:         arg_int = 0
    __pyx_v_arg_int = 0;
+08122:         if kind == 'symbol':
    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_symbol, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8122, __pyx_L1_error)
    if (__pyx_t_2) {
/* … */
      goto __pyx_L13;
    }
+08123:             kind_int = <int>qwp_arrow_override_symbol
      __pyx_v_kind_int = ((int)qwp_arrow_override_symbol);
+08124:         elif kind == 'ipv4':
    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_ipv4, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8124, __pyx_L1_error)
    if (__pyx_t_2) {
/* … */
      goto __pyx_L13;
    }
+08125:             kind_int = <int>qwp_arrow_override_ipv4
      __pyx_v_kind_int = ((int)qwp_arrow_override_ipv4);
+08126:         elif kind == 'char':
    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_char_2, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8126, __pyx_L1_error)
    if (__pyx_t_2) {
/* … */
      goto __pyx_L13;
    }
+08127:             kind_int = <int>qwp_arrow_override_char
      __pyx_v_kind_int = ((int)qwp_arrow_override_char);
+08128:         elif kind == 'uuid':
    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_uuid, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8128, __pyx_L1_error)
    if (__pyx_t_2) {
/* … */
      goto __pyx_L13;
    }
+08129:             kind_int = <int>qwp_arrow_override_uuid
      __pyx_v_kind_int = ((int)qwp_arrow_override_uuid);
+08130:         elif kind == 'long256':
    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_long256, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8130, __pyx_L1_error)
    if (__pyx_t_2) {
/* … */
      goto __pyx_L13;
    }
+08131:             kind_int = <int>qwp_arrow_override_long256
      __pyx_v_kind_int = ((int)qwp_arrow_override_long256);
+08132:         elif kind == 'binary':
    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_binary, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8132, __pyx_L1_error)
    if (__pyx_t_2) {
/* … */
      goto __pyx_L13;
    }
+08133:             kind_int = _SCHEMA_OVERRIDE_BINARY
      __pyx_v_kind_int = __pyx_v_7questdb_7_client__SCHEMA_OVERRIDE_BINARY;
+08134:         elif kind == 'geohash':
    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_geohash_2, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8134, __pyx_L1_error)
    if (likely(__pyx_t_2)) {
/* … */
      goto __pyx_L13;
    }
 08135:             # Held to the range as a Python object, so a number too
 08136:             # wide for the C field is refused rather than overflowing
 08137:             # on the way into it.
+08138:             bits = int(value) if _is_integral_not_bool(value) else None
      __pyx_t_2 = __pyx_f_7questdb_7_client__is_integral_not_bool(__pyx_v_value); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8138, __pyx_L1_error)
      if (__pyx_t_2) {
        __pyx_t_17 = __Pyx_PyNumber_Int(__pyx_v_value); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8138, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_17);
        __pyx_t_11 = __pyx_t_17;
        __pyx_t_17 = 0;
      } else {
        __Pyx_INCREF(Py_None);
        __pyx_t_11 = Py_None;
      }
      __Pyx_XDECREF_SET(__pyx_v_bits, __pyx_t_11);
      __pyx_t_11 = 0;
+08139:             if bits is None or bits < 1 or bits > 60:
      __pyx_t_1 = (__pyx_v_bits == Py_None);
      if (!__pyx_t_1) {
      } else {
        __pyx_t_2 = __pyx_t_1;
        goto __pyx_L15_bool_binop_done;
      }
      __pyx_t_11 = PyObject_RichCompare(__pyx_v_bits, __pyx_mstate_global->__pyx_int_1, Py_LT); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8139, __pyx_L1_error)
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 8139, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (!__pyx_t_1) {
      } else {
        __pyx_t_2 = __pyx_t_1;
        goto __pyx_L15_bool_binop_done;
      }
      __pyx_t_11 = PyObject_RichCompare(__pyx_v_bits, __pyx_mstate_global->__pyx_int_60, Py_GT); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8139, __pyx_L1_error)
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 8139, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_2 = __pyx_t_1;
      __pyx_L15_bool_binop_done:;
      if (unlikely(__pyx_t_2)) {
/* … */
      }
+08140:                 raise ValueError(
        __pyx_t_17 = NULL;
+08141:                     f'schema_overrides[{name!r}] geohash bits must '
        __pyx_t_9 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8141, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
/* … */
        __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_16, 5, 17 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9) + 53 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12));
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8141, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __pyx_t_5 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_17, __pyx_t_4};
          __pyx_t_11 = __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_17); __pyx_t_17 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8140, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
        }
        __Pyx_Raise(__pyx_t_11, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __PYX_ERR(0, 8140, __pyx_L1_error)
+08142:                     f'be a whole number in 1..=60, got {value!r}.')
        __pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_value), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8142, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_16[0] = __pyx_mstate_global->__pyx_kp_u_schema_overrides;
        __pyx_t_16[1] = __pyx_t_9;
        __pyx_t_16[2] = __pyx_mstate_global->__pyx_kp_u_geohash_bits_must_be_a_whole_nu;
        __pyx_t_16[3] = __pyx_t_12;
        __pyx_t_16[4] = __pyx_mstate_global->__pyx_kp_u__2;
+08143:             kind_int = <int>qwp_arrow_override_geohash
      __pyx_v_kind_int = ((int)qwp_arrow_override_geohash);
+08144:             arg_int = bits
      __pyx_t_10 = __Pyx_PyLong_As_int(__pyx_v_bits); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8144, __pyx_L1_error)
      __pyx_v_arg_int = __pyx_t_10;
 08145:         else:
+08146:             raise ValueError(
    /*else*/ {
      __pyx_t_4 = NULL;
+08147:                 f'schema_overrides[{name!r}] kind {kind!r} not '
      __pyx_t_17 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8147, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_17);
      __pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_kind), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8147, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_16[0] = __pyx_mstate_global->__pyx_kp_u_schema_overrides;
      __pyx_t_16[1] = __pyx_t_17;
      __pyx_t_16[2] = __pyx_mstate_global->__pyx_kp_u_kind_2;
      __pyx_t_16[3] = __pyx_t_12;
      __pyx_t_16[4] = __pyx_mstate_global->__pyx_kp_u_not_in_symbol_ipv4_char_uuid_lo;
      __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_16, 5, 17 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17) + 7 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12) + 75, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12));
      if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8147, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_5 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_9};
        __pyx_t_11 = __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_11)) __PYX_ERR(0, 8146, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
      }
      __Pyx_Raise(__pyx_t_11, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __PYX_ERR(0, 8146, __pyx_L1_error)
    }
    __pyx_L13:;
 08148:                 "in {'symbol', 'ipv4', 'char', 'uuid', 'long256', "
 08149:                 "'binary', 'geohash'}.")
+08150:         out.append((name.encode('utf-8'), kind_int, arg_int))
    __pyx_t_9 = __pyx_v_name;
    __Pyx_INCREF(__pyx_t_9);
    __pyx_t_5 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_mstate_global->__pyx_kp_u_utf_8};
      __pyx_t_11 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_encode, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8150, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
    }
    __pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v_kind_int); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8150, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_arg_int); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8150, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_12 = PyTuple_New(3); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8150, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_GIVEREF(__pyx_t_11);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_11) != (0)) __PYX_ERR(0, 8150, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_9);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_9) != (0)) __PYX_ERR(0, 8150, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_4);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_t_4) != (0)) __PYX_ERR(0, 8150, __pyx_L1_error);
    __pyx_t_11 = 0;
    __pyx_t_9 = 0;
    __pyx_t_4 = 0;
    __pyx_t_18 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_12); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(0, 8150, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+08151:     return out
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;
 08152: 
 08153: 
+08154: cdef object _capsule_get_column_names(object sliceable):
static PyObject *__pyx_f_7questdb_7_client__capsule_get_column_names(PyObject *__pyx_v_sliceable) {
  PyObject *__pyx_v_names = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client._capsule_get_column_names", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_names);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08155:     """Return list of str column names from polars / pyarrow input,
 08156:     or None if the input doesn't expose a uniform name list."""
 08157:     cdef object names
+08158:     names = getattr(sliceable, 'column_names', None)
  __pyx_t_1 = __Pyx_GetAttr3(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_column_names, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8158, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_names = __pyx_t_1;
  __pyx_t_1 = 0;
+08159:     if names is not None:
  __pyx_t_2 = (__pyx_v_names != Py_None);
  if (__pyx_t_2) {
/* … */
  }
+08160:         return list(names)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PySequence_List(__pyx_v_names); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8160, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+08161:     names = getattr(sliceable, 'columns', None)
  __pyx_t_1 = __Pyx_GetAttr3(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_columns, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8161, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_names, __pyx_t_1);
  __pyx_t_1 = 0;
+08162:     if names is not None:
  __pyx_t_2 = (__pyx_v_names != Py_None);
  if (__pyx_t_2) {
/* … */
  }
+08163:         return list(names)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PySequence_List(__pyx_v_names); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8163, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+08164:     return None
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
 08165: 
 08166: 
+08167: cdef object _capsule_at_index_to_name(object sliceable, int idx):
static PyObject *__pyx_f_7questdb_7_client__capsule_at_index_to_name(PyObject *__pyx_v_sliceable, int __pyx_v_idx) {
  PyObject *__pyx_v_names = 0;
  int __pyx_v_orig;
  int __pyx_v_n;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("questdb._client._capsule_at_index_to_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_names);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08168:     """Resolve an integer `at` column index (negative allowed) to its name,
 08169:     mirroring the numpy path's `_bind_col_index`."""
+08170:     cdef object names = _capsule_get_column_names(sliceable)
  __pyx_t_1 = __pyx_f_7questdb_7_client__capsule_get_column_names(__pyx_v_sliceable); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8170, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_names = __pyx_t_1;
  __pyx_t_1 = 0;
+08171:     cdef int orig = idx
  __pyx_v_orig = __pyx_v_idx;
 08172:     cdef int n
+08173:     if names is None:
  __pyx_t_2 = (__pyx_v_names == Py_None);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+08174:         raise TypeError(
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Cannot_resolve_an_integer_at_ind};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __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_1)) __PYX_ERR(0, 8174, __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(0, 8174, __pyx_L1_error)
 08175:             'Cannot resolve an integer `at` index for this Arrow-native '
 08176:             'input; pass the designated timestamp column name as a str.')
+08177:     n = <int>len(names)
  __pyx_t_5 = PyObject_Length(__pyx_v_names); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 8177, __pyx_L1_error)
  __pyx_v_n = ((int)__pyx_t_5);
+08178:     if idx < 0:
  __pyx_t_2 = (__pyx_v_idx < 0);
  if (__pyx_t_2) {
/* … */
  }
+08179:         idx += n
    __pyx_v_idx = (__pyx_v_idx + __pyx_v_n);
+08180:     if idx < 0 or idx >= n:
  __pyx_t_6 = (__pyx_v_idx < 0);
  if (!__pyx_t_6) {
  } else {
    __pyx_t_2 = __pyx_t_6;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_6 = (__pyx_v_idx >= __pyx_v_n);
  __pyx_t_2 = __pyx_t_6;
  __pyx_L6_bool_binop_done:;
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+08181:         raise IndexError(f'Bad argument `at`: {orig} index out of range')
    __pyx_t_3 = NULL;
    __pyx_t_7 = __Pyx_PyUnicode_From_int(__pyx_v_orig, 0, ' ', 'd'); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8181, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_Bad_argument_at;
    __pyx_t_8[1] = __pyx_t_7;
    __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u_index_out_of_range;
    __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_8, 3, 19 * 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7), 127);
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8181, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_9};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_IndexError)), __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_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8181, __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(0, 8181, __pyx_L1_error)
+08182:     return names[idx]
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_names, __pyx_v_idx, int, 1, __Pyx_PyLong_From_int, 0, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8182, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 08183: 
 08184: 
+08185: cdef bint _capsule_polars_dtype_is_string_like(object dtype) except -1:
static int __pyx_f_7questdb_7_client__capsule_polars_dtype_is_string_like(PyObject *__pyx_v_dtype) {
  PyObject *__pyx_v_enum_t = 0;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._capsule_polars_dtype_is_string_like", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_enum_t);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08186:     """polars: Utf8 / String / Categorical / Enum count as string-like."""
+08187:     if _POLARS is None:
  __pyx_t_1 = (__pyx_v_7questdb_7_client__POLARS == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+08188:         return False
    __pyx_r = 0;
    goto __pyx_L0;
+08189:     if dtype == _POLARS.Utf8:
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_Utf8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_dtype, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8189, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 8189, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_1) {
/* … */
  }
+08190:         return True
    __pyx_r = 1;
    goto __pyx_L0;
+08191:     if isinstance(dtype, _POLARS.Categorical):
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_Categorical); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_3); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 8191, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_1) {
/* … */
  }
+08192:         return True
    __pyx_r = 1;
    goto __pyx_L0;
+08193:     cdef object enum_t = getattr(_POLARS, 'Enum', None)
  __pyx_t_3 = __pyx_v_7questdb_7_client__POLARS;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_GetAttr3(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Enum, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_enum_t = __pyx_t_2;
  __pyx_t_2 = 0;
+08194:     if enum_t is not None and isinstance(dtype, enum_t):
  __pyx_t_4 = (__pyx_v_enum_t != Py_None);
  if (__pyx_t_4) {
  } else {
    __pyx_t_1 = __pyx_t_4;
    goto __pyx_L7_bool_binop_done;
  }
  __pyx_t_4 = PyObject_IsInstance(__pyx_v_dtype, __pyx_v_enum_t); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 8194, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_4;
  __pyx_L7_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+08195:         return True
    __pyx_r = 1;
    goto __pyx_L0;
+08196:     return False
  __pyx_r = 0;
  goto __pyx_L0;
 08197: 
 08198: 
+08199: cdef bint _capsule_pyarrow_type_is_utf8(object pa_type) except -1:
static int __pyx_f_7questdb_7_client__capsule_pyarrow_type_is_utf8(PyObject *__pyx_v_pa_type) {
  PyObject *__pyx_v_is_string_view = 0;
  int __pyx_r;
/* … */
  /* 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._capsule_pyarrow_type_is_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_is_string_view);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+08200:     cdef object is_string_view = getattr(
  __pyx_t_2 = __Pyx_GetAttr3(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_is_string_view, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_is_string_view = __pyx_t_2;
  __pyx_t_2 = 0;
+08201:         _PYARROW.types, 'is_string_view', None)
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8201, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
+08202:     return (_PYARROW.types.is_string(pa_type)
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = __pyx_t_4;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_pa_type};
    __pyx_t_2 = __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_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8202, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 8202, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!__pyx_t_6) {
  } else {
    __pyx_t_3 = __pyx_t_6;
    goto __pyx_L3_bool_binop_done;
  }
+08203:             or _PYARROW.types.is_large_string(pa_type)
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8203, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __pyx_t_1;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_pa_type};
    __pyx_t_2 = __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_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8203, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 8203, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!__pyx_t_6) {
  } else {
    __pyx_t_3 = __pyx_t_6;
    goto __pyx_L3_bool_binop_done;
  }
+08204:             or (is_string_view is not None and is_string_view(pa_type)))
  __pyx_t_6 = (__pyx_v_is_string_view != Py_None);
  if (__pyx_t_6) {
  } else {
    __pyx_t_3 = __pyx_t_6;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_1 = NULL;
  __Pyx_INCREF(__pyx_v_is_string_view);
  __pyx_t_4 = __pyx_v_is_string_view; 
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_1);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_pa_type};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__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(0, 8204, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 8204, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_3 = __pyx_t_6;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_3;
  goto __pyx_L0;
 08205: 
 08206: 
+08207: cdef bint _capsule_pyarrow_type_is_string_like(object field_type) except -1:
static int __pyx_f_7questdb_7_client__capsule_pyarrow_type_is_string_like(PyObject *__pyx_v_field_type) {
  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_AddTraceback("questdb._client._capsule_pyarrow_type_is_string_like", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08208:     """pyarrow: utf8 / large_utf8 / utf8_view, plus Dictionary whose
 08209:     value type is one of those."""
+08210:     if _PYARROW is None:
  __pyx_t_1 = (__pyx_v_7questdb_7_client__PYARROW == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+08211:         return False
    __pyx_r = 0;
    goto __pyx_L0;
+08212:     if _capsule_pyarrow_type_is_utf8(field_type):
  __pyx_t_1 = __pyx_f_7questdb_7_client__capsule_pyarrow_type_is_utf8(__pyx_v_field_type); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 8212, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+08213:         return True
    __pyx_r = 1;
    goto __pyx_L0;
+08214:     return (_PYARROW.types.is_dictionary(field_type)
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8214, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __pyx_t_4;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_field_type};
    __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_dictionary, __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(0, 8214, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 8214, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_6) {
  } else {
    __pyx_t_1 = __pyx_t_6;
    goto __pyx_L5_bool_binop_done;
  }
+08215:             and _capsule_pyarrow_type_is_utf8(field_type.value_type))
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_field_type, __pyx_mstate_global->__pyx_n_u_value_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8215, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = __pyx_f_7questdb_7_client__capsule_pyarrow_type_is_utf8(__pyx_t_2); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 8215, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_1 = __pyx_t_6;
  __pyx_L5_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 08216: 
 08217: 
+08218: cdef object _capsule_schema(object sliceable, object symbols):
static PyObject *__pyx_f_7questdb_7_client__capsule_schema(PyObject *__pyx_v_sliceable, PyObject *__pyx_v_symbols) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("questdb._client._capsule_schema", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08219:     """Arrow schema of a pyarrow Table / RecordBatch when resolving
 08220:     `symbols` needs one, else None. Pandas input takes its schema from its
 08221:     first exported batch instead."""
+08222:     if (symbols is None or symbols == 'auto'
  __pyx_t_2 = (__pyx_v_symbols == Py_None);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
/* … */
  __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_symbols, __pyx_mstate_global->__pyx_n_u_auto, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8222, __pyx_L1_error)
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
/* … */
  if (__pyx_t_1) {
/* … */
  }
+08223:             or _is_polars_dataframe_or_lazy(sliceable)):
  __pyx_t_2 = __pyx_f_7questdb_7_client__is_polars_dataframe_or_lazy(__pyx_v_sliceable); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8223, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
+08224:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+08225:     if _PYARROW is None:
  __pyx_t_1 = (__pyx_v_7questdb_7_client__PYARROW == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+08226:         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_L13_try_end;
      __pyx_L8_error:;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
      __pyx_L10_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_L11_except_return:;
      __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_L0;
      __pyx_L13_try_end:;
    }
+08227:             _dataframe_require_pyarrow()
        __pyx_t_6 = __pyx_f_7questdb_7_client__dataframe_require_pyarrow(); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8227, __pyx_L8_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+08228:         except ImportError:
      __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_ImportError))));
      if (__pyx_t_7) {
        __Pyx_ErrRestore(0,0,0);
+08229:             return None
        __Pyx_XDECREF(__pyx_r);
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
        goto __pyx_L11_except_return;
      }
      goto __pyx_L10_except_error;
+08230:     if isinstance(sliceable, (_PYARROW.Table, _PYARROW.RecordBatch)):
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_Table); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8230, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_RecordBatch); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8230, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_sliceable, __pyx_t_6); 
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L17_bool_binop_done;
  }
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_sliceable, __pyx_t_8); 
  __pyx_t_1 = __pyx_t_2;
  __pyx_L17_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (__pyx_t_1) {
/* … */
  }
+08231:         return sliceable.schema
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8231, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    goto __pyx_L0;
+08232:     return None
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
 08233: 
 08234: 
+08235: cdef object _capsule_get_string_column_names(
static PyObject *__pyx_f_7questdb_7_client__capsule_get_string_column_names(PyObject *__pyx_v_sliceable, PyObject *__pyx_v_schema) {
  PyObject *__pyx_v_out = 0;
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_v_dtype = 0;
  PyObject *__pyx_v_field = 0;
  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._capsule_get_string_column_names", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_out);
  __Pyx_XDECREF(__pyx_v_name);
  __Pyx_XDECREF(__pyx_v_dtype);
  __Pyx_XDECREF(__pyx_v_field);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08236:         object sliceable, object schema):
 08237:     """Return names of all string-like columns (utf8 / large_utf8 /
 08238:     dict-of-utf8). Returns None if schema introspection is not
 08239:     available on the input."""
 08240:     cdef object out
 08241:     cdef object name
 08242:     cdef object dtype
 08243:     cdef object field
+08244:     if _POLARS is not None and isinstance(sliceable, _POLARS_DATAFRAME_T):
  __pyx_t_2 = (__pyx_v_7questdb_7_client__POLARS != Py_None);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __pyx_v_7questdb_7_client__POLARS_DATAFRAME_T;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_sliceable, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8244, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+08245:         out = []
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8245, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_out = __pyx_t_3;
    __pyx_t_3 = 0;
+08246:         for name, dtype in sliceable.schema.items():
    __pyx_t_4 = 0;
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8246, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (unlikely(__pyx_t_7 == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
      __PYX_ERR(0, 8246, __pyx_L1_error)
    }
    __pyx_t_8 = __Pyx_dict_iterator(__pyx_t_7, 0, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_5), (&__pyx_t_6)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8246, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_XDECREF(__pyx_t_3);
    __pyx_t_3 = __pyx_t_8;
    __pyx_t_8 = 0;
    while (1) {
      __pyx_t_9 = __Pyx_dict_iter_next(__pyx_t_3, __pyx_t_5, &__pyx_t_4, &__pyx_t_8, &__pyx_t_7, NULL, __pyx_t_6);
      if (unlikely(__pyx_t_9 == 0)) break;
      if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 8246, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_8);
      __pyx_t_8 = 0;
      __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_7);
      __pyx_t_7 = 0;
+08247:             if _capsule_polars_dtype_is_string_like(dtype):
      __pyx_t_1 = __pyx_f_7questdb_7_client__capsule_polars_dtype_is_string_like(__pyx_v_dtype); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 8247, __pyx_L1_error)
      if (__pyx_t_1) {
/* … */
      }
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+08248:                 out.append(name)
        __pyx_t_10 = __Pyx_PyObject_Append(__pyx_v_out, __pyx_v_name); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 8248, __pyx_L1_error)
+08249:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;
+08250:     if schema is None:
  __pyx_t_1 = (__pyx_v_schema == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+08251:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+08252:     out = []
  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8252, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_out = __pyx_t_3;
  __pyx_t_3 = 0;
+08253:     for field in schema:
  if (likely(PyList_CheckExact(__pyx_v_schema)) || PyTuple_CheckExact(__pyx_v_schema)) {
    __pyx_t_3 = __pyx_v_schema; __Pyx_INCREF(__pyx_t_3);
    __pyx_t_5 = 0;
    __pyx_t_11 = NULL;
  } else {
    __pyx_t_5 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_schema); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8253, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_11 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8253, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_11)) {
      if (likely(PyList_CheckExact(__pyx_t_3))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8253, __pyx_L1_error)
          #endif
          if (__pyx_t_5 >= __pyx_temp) break;
        }
        __pyx_t_7 = __Pyx_PyList_GetItemRefFast(__pyx_t_3, __pyx_t_5, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_5;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8253, __pyx_L1_error)
          #endif
          if (__pyx_t_5 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_7 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_5));
        #else
        __pyx_t_7 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_5);
        #endif
        ++__pyx_t_5;
      }
      if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8253, __pyx_L1_error)
    } else {
      __pyx_t_7 = __pyx_t_11(__pyx_t_3);
      if (unlikely(!__pyx_t_7)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 8253, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_XDECREF_SET(__pyx_v_field, __pyx_t_7);
    __pyx_t_7 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+08254:         if _capsule_pyarrow_type_is_string_like(field.type):
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_type); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8254, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_1 = __pyx_f_7questdb_7_client__capsule_pyarrow_type_is_string_like(__pyx_t_7); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 8254, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (__pyx_t_1) {
/* … */
    }
+08255:             out.append(field.name)
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8255, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_10 = __Pyx_PyObject_Append(__pyx_v_out, __pyx_t_7); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 8255, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+08256:     return out
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;
 08257: 
 08258: 
+08259: cdef object _capsule_column_is_string_like(
static PyObject *__pyx_f_7questdb_7_client__capsule_column_is_string_like(PyObject *__pyx_v_sliceable, PyObject *__pyx_v_schema, PyObject *__pyx_v_name) {
  PyObject *__pyx_v_dtype = 0;
  PyObject *__pyx_v_field_type = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("questdb._client._capsule_column_is_string_like", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dtype);
  __Pyx_XDECREF(__pyx_v_field_type);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08260:         object sliceable, object schema, str name):
 08261:     """Returns True iff `name` is a string-like column on `sliceable`,
 08262:     False iff it is some other type, or None if schema introspection
 08263:     is not available on the input."""
 08264:     cdef object dtype
 08265:     cdef object field_type
+08266:     if _POLARS is not None and isinstance(sliceable, _POLARS_DATAFRAME_T):
  __pyx_t_2 = (__pyx_v_7questdb_7_client__POLARS != Py_None);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __pyx_v_7questdb_7_client__POLARS_DATAFRAME_T;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_sliceable, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8266, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+08267:         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_L11_try_end;
      __pyx_L6_error:;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
      __pyx_L8_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_L1_error;
      __pyx_L11_try_end:;
    }
+08268:             dtype = sliceable.schema[name]
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8268, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_7 = __Pyx_PyObject_Dict_GetItem(__pyx_t_3, __pyx_v_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8268, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_v_dtype = __pyx_t_7;
        __pyx_t_7 = 0;
+08269:         except KeyError:
      __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_KeyError))));
      if (__pyx_t_8) {
        __Pyx_AddTraceback("questdb._client._capsule_column_is_string_like", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_3, &__pyx_t_9) < 0) __PYX_ERR(0, 8269, __pyx_L8_except_error)
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_3);
        __Pyx_XGOTREF(__pyx_t_9);
+08270:             raise KeyError(
        __pyx_t_11 = NULL;
+08271:                 f'symbols column {name!r} not found in the dataframe.')
        __pyx_t_12 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8271, __pyx_L8_except_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_13[0] = __pyx_mstate_global->__pyx_kp_u_symbols_column;
        __pyx_t_13[1] = __pyx_t_12;
        __pyx_t_13[2] = __pyx_mstate_global->__pyx_kp_u_not_found_in_the_dataframe;
        __pyx_t_14 = __Pyx_PyUnicode_Join(__pyx_t_13, 3, 15 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12) + 28, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12));
        if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 8271, __pyx_L8_except_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __pyx_t_15 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_t_14};
          __pyx_t_10 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_KeyError)), __pyx_callargs+__pyx_t_15, (2-__pyx_t_15) | (__pyx_t_15*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8270, __pyx_L8_except_error)
          __Pyx_GOTREF(__pyx_t_10);
        }
        __Pyx_Raise(__pyx_t_10, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __PYX_ERR(0, 8270, __pyx_L8_except_error)
      }
      goto __pyx_L8_except_error;
+08272:         return _capsule_polars_dtype_is_string_like(dtype)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __pyx_f_7questdb_7_client__capsule_polars_dtype_is_string_like(__pyx_v_dtype); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 8272, __pyx_L1_error)
    __pyx_t_9 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8272, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_r = __pyx_t_9;
    __pyx_t_9 = 0;
    goto __pyx_L0;
+08273:     if schema is None:
  __pyx_t_1 = (__pyx_v_schema == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+08274:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+08275:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L20_try_end;
    __pyx_L15_error:;
    __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_14); __pyx_t_14 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
    __pyx_L17_except_error:;
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_5, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L20_try_end:;
  }
+08276:         field_type = schema.field(name).type
      __pyx_t_3 = __pyx_v_schema;
      __Pyx_INCREF(__pyx_t_3);
      __pyx_t_15 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_name};
        __pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_field, __pyx_callargs+__pyx_t_15, (2-__pyx_t_15) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8276, __pyx_L15_error)
        __Pyx_GOTREF(__pyx_t_9);
      }
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_type); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8276, __pyx_L15_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_v_field_type = __pyx_t_3;
      __pyx_t_3 = 0;
+08277:     except (KeyError, ValueError):
    __pyx_t_8 = __Pyx_PyErr_ExceptionMatches2(((PyObject *)(((PyTypeObject*)PyExc_KeyError))), ((PyObject *)(((PyTypeObject*)PyExc_ValueError))));
    if (__pyx_t_8) {
      __Pyx_AddTraceback("questdb._client._capsule_column_is_string_like", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_9, &__pyx_t_7) < 0) __PYX_ERR(0, 8277, __pyx_L17_except_error)
      __Pyx_XGOTREF(__pyx_t_3);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_7);
+08278:         raise KeyError(
      __pyx_t_14 = NULL;
+08279:             f'symbols column {name!r} not found in the dataframe.')
      __pyx_t_11 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8279, __pyx_L17_except_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_13[0] = __pyx_mstate_global->__pyx_kp_u_symbols_column;
      __pyx_t_13[1] = __pyx_t_11;
      __pyx_t_13[2] = __pyx_mstate_global->__pyx_kp_u_not_found_in_the_dataframe;
      __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_13, 3, 15 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_11) + 28, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_11));
      if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8279, __pyx_L17_except_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_15 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_14, __pyx_t_12};
        __pyx_t_10 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_KeyError)), __pyx_callargs+__pyx_t_15, (2-__pyx_t_15) | (__pyx_t_15*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8278, __pyx_L17_except_error)
        __Pyx_GOTREF(__pyx_t_10);
      }
      __Pyx_Raise(__pyx_t_10, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __PYX_ERR(0, 8278, __pyx_L17_except_error)
    }
    goto __pyx_L17_except_error;
+08280:     return _capsule_pyarrow_type_is_string_like(field_type)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7questdb_7_client__capsule_pyarrow_type_is_string_like(__pyx_v_field_type); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 8280, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8280, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_r = __pyx_t_7;
  __pyx_t_7 = 0;
  goto __pyx_L0;
 08281: 
 08282: 
+08283: cdef object _capsule_get_dict_string_column_names(
static PyObject *__pyx_f_7questdb_7_client__capsule_get_dict_string_column_names(PyObject *__pyx_v_sliceable, PyObject *__pyx_v_schema) {
  PyObject *__pyx_v_out = 0;
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_v_dtype = 0;
  PyObject *__pyx_v_field = 0;
  PyObject *__pyx_v_enum_t = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* 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_AddTraceback("questdb._client._capsule_get_dict_string_column_names", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_out);
  __Pyx_XDECREF(__pyx_v_name);
  __Pyx_XDECREF(__pyx_v_dtype);
  __Pyx_XDECREF(__pyx_v_field);
  __Pyx_XDECREF(__pyx_v_enum_t);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08284:         object sliceable, object schema):
 08285:     """Return names of dict-encoded string-like columns (polars
 08286:     Categorical / Enum or pyarrow Dictionary(*, utf8/large_utf8/utf8_view)).
 08287:     Returns None if schema introspection is not available."""
 08288:     cdef object out
 08289:     cdef object name
 08290:     cdef object dtype
 08291:     cdef object field
 08292:     cdef object enum_t
+08293:     if _POLARS is not None and isinstance(sliceable, _POLARS_DATAFRAME_T):
  __pyx_t_2 = (__pyx_v_7questdb_7_client__POLARS != Py_None);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __pyx_v_7questdb_7_client__POLARS_DATAFRAME_T;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_sliceable, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8293, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+08294:         out = []
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8294, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_out = __pyx_t_3;
    __pyx_t_3 = 0;
+08295:         enum_t = getattr(_POLARS, 'Enum', None)
    __pyx_t_3 = __pyx_v_7questdb_7_client__POLARS;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_GetAttr3(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Enum, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8295, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_enum_t = __pyx_t_4;
    __pyx_t_4 = 0;
+08296:         for name, dtype in sliceable.schema.items():
    __pyx_t_5 = 0;
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8296, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (unlikely(__pyx_t_3 == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
      __PYX_ERR(0, 8296, __pyx_L1_error)
    }
    __pyx_t_8 = __Pyx_dict_iterator(__pyx_t_3, 0, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_6), (&__pyx_t_7)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8296, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4);
    __pyx_t_4 = __pyx_t_8;
    __pyx_t_8 = 0;
    while (1) {
      __pyx_t_9 = __Pyx_dict_iter_next(__pyx_t_4, __pyx_t_6, &__pyx_t_5, &__pyx_t_8, &__pyx_t_3, NULL, __pyx_t_7);
      if (unlikely(__pyx_t_9 == 0)) break;
      if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 8296, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_8);
      __pyx_t_8 = 0;
      __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_3);
      __pyx_t_3 = 0;
+08297:             if isinstance(dtype, _POLARS.Categorical):
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__POLARS, __pyx_mstate_global->__pyx_n_u_Categorical); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8297, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_1 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_3); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 8297, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (__pyx_t_1) {
/* … */
        goto __pyx_L8;
      }
+08298:                 out.append(name)
        __pyx_t_10 = __Pyx_PyObject_Append(__pyx_v_out, __pyx_v_name); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 8298, __pyx_L1_error)
+08299:             elif enum_t is not None and isinstance(dtype, enum_t):
      __pyx_t_2 = (__pyx_v_enum_t != Py_None);
      if (__pyx_t_2) {
      } else {
        __pyx_t_1 = __pyx_t_2;
        goto __pyx_L9_bool_binop_done;
      }
      __pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_v_enum_t); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8299, __pyx_L1_error)
      __pyx_t_1 = __pyx_t_2;
      __pyx_L9_bool_binop_done:;
      if (__pyx_t_1) {
/* … */
      }
      __pyx_L8:;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+08300:                 out.append(name)
        __pyx_t_10 = __Pyx_PyObject_Append(__pyx_v_out, __pyx_v_name); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 8300, __pyx_L1_error)
+08301:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;
+08302:     if schema is None:
  __pyx_t_1 = (__pyx_v_schema == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+08303:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+08304:     out = []
  __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8304, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_out = __pyx_t_4;
  __pyx_t_4 = 0;
+08305:     for field in schema:
  if (likely(PyList_CheckExact(__pyx_v_schema)) || PyTuple_CheckExact(__pyx_v_schema)) {
    __pyx_t_4 = __pyx_v_schema; __Pyx_INCREF(__pyx_t_4);
    __pyx_t_6 = 0;
    __pyx_t_11 = NULL;
  } else {
    __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_schema); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8305, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_11 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8305, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_11)) {
      if (likely(PyList_CheckExact(__pyx_t_4))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8305, __pyx_L1_error)
          #endif
          if (__pyx_t_6 >= __pyx_temp) break;
        }
        __pyx_t_3 = __Pyx_PyList_GetItemRefFast(__pyx_t_4, __pyx_t_6, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_6;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_4);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8305, __pyx_L1_error)
          #endif
          if (__pyx_t_6 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_6));
        #else
        __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_6);
        #endif
        ++__pyx_t_6;
      }
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8305, __pyx_L1_error)
    } else {
      __pyx_t_3 = __pyx_t_11(__pyx_t_4);
      if (unlikely(!__pyx_t_3)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 8305, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XDECREF_SET(__pyx_v_field, __pyx_t_3);
    __pyx_t_3 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+08306:         if (_PYARROW.types.is_dictionary(field.type)
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8306, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_8 = __pyx_t_12;
    __Pyx_INCREF(__pyx_t_8);
    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_type); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 8306, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_14 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_13};
      __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_dictionary, __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8306, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8306, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L15_bool_binop_done;
    }
/* … */
    if (__pyx_t_1) {
/* … */
    }
+08307:                 and _capsule_pyarrow_type_is_utf8(field.type.value_type)):
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_type); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8307, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_value_type); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8307, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_2 = __pyx_f_7questdb_7_client__capsule_pyarrow_type_is_utf8(__pyx_t_12); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8307, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_1 = __pyx_t_2;
    __pyx_L15_bool_binop_done:;
+08308:             out.append(field.name)
      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8308, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_10 = __Pyx_PyObject_Append(__pyx_v_out, __pyx_t_12); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 8308, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+08309:     return out
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;
 08310: 
 08311: 
+08312: cdef object _resolve_symbols_to_overrides(
static PyObject *__pyx_f_7questdb_7_client__resolve_symbols_to_overrides(PyObject *__pyx_v_sliceable, PyObject *__pyx_v_schema, PyObject *__pyx_v_symbols) {
  PyObject *__pyx_v_out = 0;
  int __pyx_v_symbol_kind;
  int __pyx_v_not_symbol_kind;
  PyObject *__pyx_v_col_names = 0;
  PyObject *__pyx_v_entry = 0;
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_v_is_str = 0;
  int __pyx_v_idx;
  PyObject *__pyx_v_listed = 0;
  PyObject *__pyx_v_dict_names = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_AddTraceback("questdb._client._resolve_symbols_to_overrides", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_out);
  __Pyx_XDECREF(__pyx_v_col_names);
  __Pyx_XDECREF(__pyx_v_entry);
  __Pyx_XDECREF(__pyx_v_name);
  __Pyx_XDECREF(__pyx_v_is_str);
  __Pyx_XDECREF(__pyx_v_listed);
  __Pyx_XDECREF(__pyx_v_dict_names);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08313:         object sliceable, object schema, object symbols):
 08314:     """Translate `symbols` into a list of
 08315:     (name_bytes, kind, arg) tuples matching the shape returned by
 08316:     _validate_schema_overrides. `kind` is `qwp_arrow_override_symbol`
 08317:     to mark a column as SYMBOL or `qwp_arrow_override_not_symbol`
 08318:     to force a dict-encoded column to VARCHAR; `arg` is unused (0) for both.
 08319:     Returns:
 08320: 
 08321:     - []   for None / 'auto' (no overrides, Rust default applies —
 08322:            Dictionary columns auto-classify as SymbolDict).
 08323:     - list for True (auto-detect str cols) / False (force NotSymbol
 08324:            on every dict-encoded str col) / List[str] / List[int].
 08325:     - None if resolution requires introspection not available on the
 08326:            input; caller falls back to Manual plan.
 08327: 
 08328:     Raises QuestDBError(BadDataFrame) when an explicitly-named symbols
 08329:     entry targets a non-string column (matches Manual plan semantics).
 08330:     """
 08331:     cdef list out
+08332:     cdef int symbol_kind = <int>qwp_arrow_override_symbol
  __pyx_v_symbol_kind = ((int)qwp_arrow_override_symbol);
+08333:     cdef int not_symbol_kind = <int>qwp_arrow_override_not_symbol
  __pyx_v_not_symbol_kind = ((int)qwp_arrow_override_not_symbol);
 08334:     cdef object col_names
 08335:     cdef object entry
 08336:     cdef object name
 08337:     cdef object is_str
 08338:     cdef int idx
 08339:     cdef set listed
 08340:     cdef object dict_names
 08341: 
+08342:     if symbols is None or symbols == 'auto':
  __pyx_t_2 = (__pyx_v_symbols == Py_None);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_symbols, __pyx_mstate_global->__pyx_n_u_auto, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8342, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+08343:         return []
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8343, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
 08344: 
+08345:     if symbols is False:
  __pyx_t_1 = (__pyx_v_symbols == Py_False);
  if (__pyx_t_1) {
/* … */
  }
+08346:         col_names = _capsule_get_dict_string_column_names(sliceable, schema)
    __pyx_t_3 = __pyx_f_7questdb_7_client__capsule_get_dict_string_column_names(__pyx_v_sliceable, __pyx_v_schema); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8346, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_col_names = __pyx_t_3;
    __pyx_t_3 = 0;
+08347:         if col_names is None:
    __pyx_t_1 = (__pyx_v_col_names == Py_None);
    if (__pyx_t_1) {
/* … */
    }
+08348:             return None
      __Pyx_XDECREF(__pyx_r);
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      goto __pyx_L0;
+08349:         out = []
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8349, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_out = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
+08350:         for entry in col_names:
    if (likely(PyList_CheckExact(__pyx_v_col_names)) || PyTuple_CheckExact(__pyx_v_col_names)) {
      __pyx_t_3 = __pyx_v_col_names; __Pyx_INCREF(__pyx_t_3);
      __pyx_t_4 = 0;
      __pyx_t_5 = NULL;
    } else {
      __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_col_names); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8350, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8350, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_5)) {
        if (likely(PyList_CheckExact(__pyx_t_3))) {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3);
            #if !CYTHON_ASSUME_SAFE_SIZE
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8350, __pyx_L1_error)
            #endif
            if (__pyx_t_4 >= __pyx_temp) break;
          }
          __pyx_t_6 = __Pyx_PyList_GetItemRefFast(__pyx_t_3, __pyx_t_4, __Pyx_ReferenceSharing_OwnStrongReference);
          ++__pyx_t_4;
        } else {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3);
            #if !CYTHON_ASSUME_SAFE_SIZE
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8350, __pyx_L1_error)
            #endif
            if (__pyx_t_4 >= __pyx_temp) break;
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_6 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4));
          #else
          __pyx_t_6 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_4);
          #endif
          ++__pyx_t_4;
        }
        if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8350, __pyx_L1_error)
      } else {
        __pyx_t_6 = __pyx_t_5(__pyx_t_3);
        if (unlikely(!__pyx_t_6)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 8350, __pyx_L1_error)
            PyErr_Clear();
          }
          break;
        }
      }
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_XDECREF_SET(__pyx_v_entry, __pyx_t_6);
      __pyx_t_6 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+08351:             out.append((entry.encode('utf-8'), not_symbol_kind, 0))
      __pyx_t_7 = __pyx_v_entry;
      __Pyx_INCREF(__pyx_t_7);
      __pyx_t_8 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_utf_8};
        __pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_encode, __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(0, 8351, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
      }
      __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_not_symbol_kind); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8351, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8351, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_GIVEREF(__pyx_t_6);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_6) != (0)) __PYX_ERR(0, 8351, __pyx_L1_error);
      __Pyx_GIVEREF(__pyx_t_7);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_7) != (0)) __PYX_ERR(0, 8351, __pyx_L1_error);
      __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
      __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_0);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_mstate_global->__pyx_int_0) != (0)) __PYX_ERR(0, 8351, __pyx_L1_error);
      __pyx_t_6 = 0;
      __pyx_t_7 = 0;
      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_9); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 8351, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+08352:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;
 08353: 
+08354:     if symbols is True:
  __pyx_t_1 = (__pyx_v_symbols == Py_True);
  if (__pyx_t_1) {
/* … */
  }
+08355:         col_names = _capsule_get_string_column_names(sliceable, schema)
    __pyx_t_3 = __pyx_f_7questdb_7_client__capsule_get_string_column_names(__pyx_v_sliceable, __pyx_v_schema); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8355, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_col_names = __pyx_t_3;
    __pyx_t_3 = 0;
+08356:         if col_names is None:
    __pyx_t_1 = (__pyx_v_col_names == Py_None);
    if (__pyx_t_1) {
/* … */
    }
+08357:             return None
      __Pyx_XDECREF(__pyx_r);
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      goto __pyx_L0;
+08358:         out = []
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8358, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_out = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
+08359:         for entry in col_names:
    if (likely(PyList_CheckExact(__pyx_v_col_names)) || PyTuple_CheckExact(__pyx_v_col_names)) {
      __pyx_t_3 = __pyx_v_col_names; __Pyx_INCREF(__pyx_t_3);
      __pyx_t_4 = 0;
      __pyx_t_5 = NULL;
    } else {
      __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_col_names); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8359, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8359, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_5)) {
        if (likely(PyList_CheckExact(__pyx_t_3))) {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3);
            #if !CYTHON_ASSUME_SAFE_SIZE
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8359, __pyx_L1_error)
            #endif
            if (__pyx_t_4 >= __pyx_temp) break;
          }
          __pyx_t_9 = __Pyx_PyList_GetItemRefFast(__pyx_t_3, __pyx_t_4, __Pyx_ReferenceSharing_OwnStrongReference);
          ++__pyx_t_4;
        } else {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3);
            #if !CYTHON_ASSUME_SAFE_SIZE
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8359, __pyx_L1_error)
            #endif
            if (__pyx_t_4 >= __pyx_temp) break;
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_9 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4));
          #else
          __pyx_t_9 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_4);
          #endif
          ++__pyx_t_4;
        }
        if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8359, __pyx_L1_error)
      } else {
        __pyx_t_9 = __pyx_t_5(__pyx_t_3);
        if (unlikely(!__pyx_t_9)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 8359, __pyx_L1_error)
            PyErr_Clear();
          }
          break;
        }
      }
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_XDECREF_SET(__pyx_v_entry, __pyx_t_9);
      __pyx_t_9 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+08360:             out.append((entry.encode('utf-8'), symbol_kind, 0))
      __pyx_t_7 = __pyx_v_entry;
      __Pyx_INCREF(__pyx_t_7);
      __pyx_t_8 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_utf_8};
        __pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_encode, __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_9)) __PYX_ERR(0, 8360, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
      }
      __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_symbol_kind); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8360, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8360, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_9);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_9) != (0)) __PYX_ERR(0, 8360, __pyx_L1_error);
      __Pyx_GIVEREF(__pyx_t_7);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_7) != (0)) __PYX_ERR(0, 8360, __pyx_L1_error);
      __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
      __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_0);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_mstate_global->__pyx_int_0) != (0)) __PYX_ERR(0, 8360, __pyx_L1_error);
      __pyx_t_9 = 0;
      __pyx_t_7 = 0;
      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_6); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 8360, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+08361:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;
 08362: 
+08363:     if not isinstance(symbols, (list, tuple)):
  __pyx_t_2 = PyList_Check(__pyx_v_symbols); 
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L17_bool_binop_done;
  }
  __pyx_t_2 = PyTuple_Check(__pyx_v_symbols); 
  __pyx_t_1 = __pyx_t_2;
  __pyx_L17_bool_binop_done:;
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {
/* … */
  }
+08364:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
 08365: 
+08366:     out = []
  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8366, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_out = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+08367:     col_names = None
  __Pyx_INCREF(Py_None);
  __pyx_v_col_names = Py_None;
+08368:     listed = set()
  __pyx_t_3 = PySet_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8368, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_listed = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+08369:     for entry in symbols:
  if (likely(PyList_CheckExact(__pyx_v_symbols)) || PyTuple_CheckExact(__pyx_v_symbols)) {
    __pyx_t_3 = __pyx_v_symbols; __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
  } else {
    __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_symbols); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8369, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8369, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_5)) {
      if (likely(PyList_CheckExact(__pyx_t_3))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8369, __pyx_L1_error)
          #endif
          if (__pyx_t_4 >= __pyx_temp) break;
        }
        __pyx_t_6 = __Pyx_PyList_GetItemRefFast(__pyx_t_3, __pyx_t_4, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_4;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8369, __pyx_L1_error)
          #endif
          if (__pyx_t_4 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_6 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4));
        #else
        __pyx_t_6 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_4);
        #endif
        ++__pyx_t_4;
      }
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8369, __pyx_L1_error)
    } else {
      __pyx_t_6 = __pyx_t_5(__pyx_t_3);
      if (unlikely(!__pyx_t_6)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 8369, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_XDECREF_SET(__pyx_v_entry, __pyx_t_6);
    __pyx_t_6 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+08370:         if isinstance(entry, str):
    __pyx_t_2 = PyUnicode_Check(__pyx_v_entry); 
    if (__pyx_t_2) {
/* … */
      goto __pyx_L21;
    }
+08371:             name = entry
      __Pyx_INCREF(__pyx_v_entry);
      __Pyx_XDECREF_SET(__pyx_v_name, __pyx_v_entry);
+08372:         elif isinstance(entry, int):
    __pyx_t_2 = PyLong_Check(__pyx_v_entry); 
    if (likely(__pyx_t_2)) {
/* … */
      goto __pyx_L21;
    }
+08373:             if col_names is None:
      __pyx_t_2 = (__pyx_v_col_names == Py_None);
      if (__pyx_t_2) {
/* … */
      }
+08374:                 col_names = _capsule_get_column_names(sliceable)
        __pyx_t_6 = __pyx_f_7questdb_7_client__capsule_get_column_names(__pyx_v_sliceable); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8374, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF_SET(__pyx_v_col_names, __pyx_t_6);
        __pyx_t_6 = 0;
+08375:                 if col_names is None:
        __pyx_t_2 = (__pyx_v_col_names == Py_None);
        if (__pyx_t_2) {
/* … */
        }
+08376:                     return None
          __Pyx_XDECREF(__pyx_r);
          __pyx_r = Py_None; __Pyx_INCREF(Py_None);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          goto __pyx_L0;
+08377:             idx = <int>entry
      __pyx_t_11 = __Pyx_PyLong_As_int(__pyx_v_entry); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8377, __pyx_L1_error)
      __pyx_v_idx = ((int)__pyx_t_11);
+08378:             if idx < 0:
      __pyx_t_2 = (__pyx_v_idx < 0);
      if (__pyx_t_2) {
/* … */
      }
+08379:                 idx += len(col_names)
        __pyx_t_12 = PyObject_Length(__pyx_v_col_names); if (unlikely(__pyx_t_12 == ((Py_ssize_t)-1))) __PYX_ERR(0, 8379, __pyx_L1_error)
        __pyx_v_idx = (__pyx_v_idx + __pyx_t_12);
+08380:             if idx < 0 or idx >= len(col_names):
      __pyx_t_1 = (__pyx_v_idx < 0);
      if (!__pyx_t_1) {
      } else {
        __pyx_t_2 = __pyx_t_1;
        goto __pyx_L26_bool_binop_done;
      }
      __pyx_t_12 = PyObject_Length(__pyx_v_col_names); if (unlikely(__pyx_t_12 == ((Py_ssize_t)-1))) __PYX_ERR(0, 8380, __pyx_L1_error)
      __pyx_t_1 = (__pyx_v_idx >= __pyx_t_12);
      __pyx_t_2 = __pyx_t_1;
      __pyx_L26_bool_binop_done:;
      if (unlikely(__pyx_t_2)) {
/* … */
      }
+08381:                 raise ValueError(
        __pyx_t_7 = NULL;
+08382:                     f'symbols index {entry} out of range '
        __pyx_t_9 = __Pyx_PyObject_FormatSimple(__pyx_v_entry, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8382, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
/* … */
        __pyx_t_15 = __Pyx_PyUnicode_Join(__pyx_t_14, 5, 14 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9) + 20 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13) + 10, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9));
        if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 8382, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __pyx_t_8 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_15};
          __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8381, __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(0, 8381, __pyx_L1_error)
+08383:                     f'(have {len(col_names)} columns).')
        __pyx_t_12 = PyObject_Length(__pyx_v_col_names); if (unlikely(__pyx_t_12 == ((Py_ssize_t)-1))) __PYX_ERR(0, 8383, __pyx_L1_error)
        __pyx_t_13 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_t_12, 0, ' ', 'd'); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 8383, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_13);
        __pyx_t_14[0] = __pyx_mstate_global->__pyx_kp_u_symbols_index;
        __pyx_t_14[1] = __pyx_t_9;
        __pyx_t_14[2] = __pyx_mstate_global->__pyx_kp_u_out_of_range_have;
        __pyx_t_14[3] = __pyx_t_13;
        __pyx_t_14[4] = __pyx_mstate_global->__pyx_kp_u_columns_4;
+08384:             name = col_names[idx]
      __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_col_names, __pyx_v_idx, int, 1, __Pyx_PyLong_From_int, 0, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8384, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_6);
      __pyx_t_6 = 0;
 08385:         else:
+08386:             raise TypeError(
    /*else*/ {
      __pyx_t_15 = NULL;
+08387:                 f'symbols entry must be str or int, got '
      __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_16, 3, 38 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13));
      if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8387, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __pyx_t_8 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_15, __pyx_t_7};
        __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8386, __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(0, 8386, __pyx_L1_error)
    }
    __pyx_L21:;
+08388:                 f'{type(entry).__name__}.')
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_entry)), __pyx_mstate_global->__pyx_n_u_name_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8388, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_13 = __Pyx_PyObject_FormatSimple(__pyx_t_7, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 8388, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_16[0] = __pyx_mstate_global->__pyx_kp_u_symbols_entry_must_be_str_or_int;
      __pyx_t_16[1] = __pyx_t_13;
      __pyx_t_16[2] = __pyx_mstate_global->__pyx_kp_u__2;
+08389:         is_str = _capsule_column_is_string_like(sliceable, schema, name)
    __pyx_t_6 = __pyx_v_name;
    __Pyx_INCREF(__pyx_t_6);
    if (!(likely(PyUnicode_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_6))) __PYX_ERR(0, 8389, __pyx_L1_error)
    __pyx_t_7 = __pyx_f_7questdb_7_client__capsule_column_is_string_like(__pyx_v_sliceable, __pyx_v_schema, ((PyObject*)__pyx_t_6)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8389, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF_SET(__pyx_v_is_str, __pyx_t_7);
    __pyx_t_7 = 0;
+08390:         if is_str is None:
    __pyx_t_2 = (__pyx_v_is_str == Py_None);
    if (__pyx_t_2) {
/* … */
    }
+08391:             return None
      __Pyx_XDECREF(__pyx_r);
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      goto __pyx_L0;
+08392:         if not is_str:
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_is_str); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8392, __pyx_L1_error)
    __pyx_t_1 = (!__pyx_t_2);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+08393:             raise QuestDBError(
      __pyx_t_6 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 8393, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
+08394:                 QuestDBErrorCode.BadDataFrame,
      __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 8394, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_BadDataFrame); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8394, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+08395:                 f'Bad argument `symbols`: column {name!r} is not a '
      __pyx_t_13 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 8395, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __pyx_t_16[0] = __pyx_mstate_global->__pyx_kp_u_Bad_argument_symbols_column;
      __pyx_t_16[1] = __pyx_t_13;
      __pyx_t_16[2] = __pyx_mstate_global->__pyx_kp_u_is_not_a_strings_column;
      __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_16, 3, 31 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13) + 25, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13));
      if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8395, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_17);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __pyx_t_8 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_15))) {
        __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_15);
        assert(__pyx_t_6);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_15);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_15, __pyx__function);
        __pyx_t_8 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_9, __pyx_t_17};
        __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_15, __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_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8393, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
      }
      __Pyx_Raise(__pyx_t_7, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __PYX_ERR(0, 8393, __pyx_L1_error)
 08396:                 f'strings column.')
+08397:         listed.add(name)
    __pyx_t_10 = PySet_Add(__pyx_v_listed, __pyx_v_name); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 8397, __pyx_L1_error)
+08398:         out.append((name.encode('utf-8'), symbol_kind, 0))
    __pyx_t_15 = __pyx_v_name;
    __Pyx_INCREF(__pyx_t_15);
    __pyx_t_8 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_15, __pyx_mstate_global->__pyx_kp_u_utf_8};
      __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_encode, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8398, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
    }
    __pyx_t_15 = __Pyx_PyLong_From_int(__pyx_v_symbol_kind); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 8398, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_17 = PyTuple_New(3); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8398, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
    __Pyx_GIVEREF(__pyx_t_7);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_7) != (0)) __PYX_ERR(0, 8398, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_15);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_17, 1, __pyx_t_15) != (0)) __PYX_ERR(0, 8398, __pyx_L1_error);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_0);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_17, 2, __pyx_mstate_global->__pyx_int_0) != (0)) __PYX_ERR(0, 8398, __pyx_L1_error);
    __pyx_t_7 = 0;
    __pyx_t_15 = 0;
    __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_17); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 8398, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 08399: 
 08400:     # Match the row/numpy planner: an explicit symbols list marks only the
 08401:     # listed columns as symbols; every other dict-encoded (categorical)
 08402:     # column is forced to a plain VARCHAR field rather than auto-symbolized.
+08403:     dict_names = _capsule_get_dict_string_column_names(sliceable, schema)
  __pyx_t_3 = __pyx_f_7questdb_7_client__capsule_get_dict_string_column_names(__pyx_v_sliceable, __pyx_v_schema); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8403, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_dict_names = __pyx_t_3;
  __pyx_t_3 = 0;
+08404:     if dict_names is None:
  __pyx_t_1 = (__pyx_v_dict_names == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+08405:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+08406:     for name in dict_names:
  if (likely(PyList_CheckExact(__pyx_v_dict_names)) || PyTuple_CheckExact(__pyx_v_dict_names)) {
    __pyx_t_3 = __pyx_v_dict_names; __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
  } else {
    __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_dict_names); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8406, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8406, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_5)) {
      if (likely(PyList_CheckExact(__pyx_t_3))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8406, __pyx_L1_error)
          #endif
          if (__pyx_t_4 >= __pyx_temp) break;
        }
        __pyx_t_17 = __Pyx_PyList_GetItemRefFast(__pyx_t_3, __pyx_t_4, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_4;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8406, __pyx_L1_error)
          #endif
          if (__pyx_t_4 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_17 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4));
        #else
        __pyx_t_17 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_4);
        #endif
        ++__pyx_t_4;
      }
      if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8406, __pyx_L1_error)
    } else {
      __pyx_t_17 = __pyx_t_5(__pyx_t_3);
      if (unlikely(!__pyx_t_17)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 8406, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_17);
    __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_17);
    __pyx_t_17 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+08407:         if name not in listed:
    __pyx_t_1 = (__Pyx_PySet_ContainsTF(__pyx_v_name, __pyx_v_listed, Py_NE)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 8407, __pyx_L1_error)
    if (__pyx_t_1) {
/* … */
    }
+08408:             out.append((name.encode('utf-8'), not_symbol_kind, 0))
      __pyx_t_15 = __pyx_v_name;
      __Pyx_INCREF(__pyx_t_15);
      __pyx_t_8 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_15, __pyx_mstate_global->__pyx_kp_u_utf_8};
        __pyx_t_17 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_encode, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
        if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8408, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_17);
      }
      __pyx_t_15 = __Pyx_PyLong_From_int(__pyx_v_not_symbol_kind); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 8408, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8408, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_17);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_17) != (0)) __PYX_ERR(0, 8408, __pyx_L1_error);
      __Pyx_GIVEREF(__pyx_t_15);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_15) != (0)) __PYX_ERR(0, 8408, __pyx_L1_error);
      __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
      __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_0);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_mstate_global->__pyx_int_0) != (0)) __PYX_ERR(0, 8408, __pyx_L1_error);
      __pyx_t_17 = 0;
      __pyx_t_15 = 0;
      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_7); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 8408, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+08409:     return out
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;
 08410: 
 08411: 
+08412: cdef object _merge_capsule_overrides(
static PyObject *__pyx_f_7questdb_7_client__merge_capsule_overrides(PyObject *__pyx_v_weaker, PyObject *__pyx_v_stronger) {
  PyObject *__pyx_v_stronger_names = 0;
  PyObject *__pyx_v_merged = 0;
  PyObject *__pyx_v_entry = 0;
  PyObject *__pyx_9genexpr22__pyx_v_entry = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* 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._merge_capsule_overrides", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_stronger_names);
  __Pyx_XDECREF(__pyx_v_merged);
  __Pyx_XDECREF(__pyx_v_entry);
  __Pyx_XDECREF(__pyx_9genexpr22__pyx_v_entry);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08413:         object weaker, object stronger):
 08414:     """Merge two override lists, `stronger` winning on name collision.
 08415: 
 08416:     The three sources rank: `schema_overrides` states a type outright,
 08417:     `symbols` states one for string columns, and `df.attrs['questdb']`
 08418:     only recalls what a column held when it was read back out of
 08419:     QuestDB.
 08420:     """
 08421:     cdef set stronger_names
 08422:     cdef list merged
 08423:     cdef object entry
+08424:     if not weaker and stronger is None:
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_weaker); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8424, __pyx_L1_error)
  __pyx_t_3 = (!__pyx_t_2);
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = (__pyx_v_stronger == Py_None);
  __pyx_t_1 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+08425:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+08426:     if not weaker:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_weaker); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 8426, __pyx_L1_error)
  __pyx_t_3 = (!__pyx_t_1);
  if (__pyx_t_3) {
/* … */
  }
+08427:         return stronger
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_stronger);
    __pyx_r = __pyx_v_stronger;
    goto __pyx_L0;
+08428:     if stronger is None:
  __pyx_t_3 = (__pyx_v_stronger == Py_None);
  if (__pyx_t_3) {
/* … */
  }
+08429:         return weaker
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_weaker);
    __pyx_r = __pyx_v_weaker;
    goto __pyx_L0;
+08430:     stronger_names = {entry[0] for entry in stronger}
  { /* enter inner scope */
    __pyx_t_4 = PySet_New(NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8430, __pyx_L10_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (likely(PyList_CheckExact(__pyx_v_stronger)) || PyTuple_CheckExact(__pyx_v_stronger)) {
      __pyx_t_5 = __pyx_v_stronger; __Pyx_INCREF(__pyx_t_5);
      __pyx_t_6 = 0;
      __pyx_t_7 = NULL;
    } else {
      __pyx_t_6 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_stronger); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8430, __pyx_L10_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8430, __pyx_L10_error)
    }
    for (;;) {
      if (likely(!__pyx_t_7)) {
        if (likely(PyList_CheckExact(__pyx_t_5))) {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_5);
            #if !CYTHON_ASSUME_SAFE_SIZE
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8430, __pyx_L10_error)
            #endif
            if (__pyx_t_6 >= __pyx_temp) break;
          }
          __pyx_t_8 = __Pyx_PyList_GetItemRefFast(__pyx_t_5, __pyx_t_6, __Pyx_ReferenceSharing_OwnStrongReference);
          ++__pyx_t_6;
        } else {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_5);
            #if !CYTHON_ASSUME_SAFE_SIZE
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8430, __pyx_L10_error)
            #endif
            if (__pyx_t_6 >= __pyx_temp) break;
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_8 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_6));
          #else
          __pyx_t_8 = __Pyx_PySequence_ITEM(__pyx_t_5, __pyx_t_6);
          #endif
          ++__pyx_t_6;
        }
        if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8430, __pyx_L10_error)
      } else {
        __pyx_t_8 = __pyx_t_7(__pyx_t_5);
        if (unlikely(!__pyx_t_8)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 8430, __pyx_L10_error)
            PyErr_Clear();
          }
          break;
        }
      }
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_XDECREF_SET(__pyx_9genexpr22__pyx_v_entry, __pyx_t_8);
      __pyx_t_8 = 0;
      __pyx_t_8 = __Pyx_GetItemInt(__pyx_9genexpr22__pyx_v_entry, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8430, __pyx_L10_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (unlikely(PySet_Add(__pyx_t_4, (PyObject*)__pyx_t_8))) __PYX_ERR(0, 8430, __pyx_L10_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_9genexpr22__pyx_v_entry); __pyx_9genexpr22__pyx_v_entry = 0;
    goto __pyx_L14_exit_scope;
    __pyx_L10_error:;
    __Pyx_XDECREF(__pyx_9genexpr22__pyx_v_entry); __pyx_9genexpr22__pyx_v_entry = 0;
    goto __pyx_L1_error;
    __pyx_L14_exit_scope:;
  } /* exit inner scope */
  __pyx_v_stronger_names = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
+08431:     merged = list(stronger)
  __pyx_t_4 = PySequence_List(__pyx_v_stronger); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_merged = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
+08432:     for entry in weaker:
  if (likely(PyList_CheckExact(__pyx_v_weaker)) || PyTuple_CheckExact(__pyx_v_weaker)) {
    __pyx_t_4 = __pyx_v_weaker; __Pyx_INCREF(__pyx_t_4);
    __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
  } else {
    __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_weaker); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8432, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8432, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_7)) {
      if (likely(PyList_CheckExact(__pyx_t_4))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8432, __pyx_L1_error)
          #endif
          if (__pyx_t_6 >= __pyx_temp) break;
        }
        __pyx_t_5 = __Pyx_PyList_GetItemRefFast(__pyx_t_4, __pyx_t_6, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_6;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_4);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8432, __pyx_L1_error)
          #endif
          if (__pyx_t_6 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_5 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_6));
        #else
        __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_6);
        #endif
        ++__pyx_t_6;
      }
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8432, __pyx_L1_error)
    } else {
      __pyx_t_5 = __pyx_t_7(__pyx_t_4);
      if (unlikely(!__pyx_t_5)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 8432, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_XDECREF_SET(__pyx_v_entry, __pyx_t_5);
    __pyx_t_5 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+08433:         if entry[0] not in stronger_names:
    __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_entry, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8433, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = (__Pyx_PySet_ContainsTF(__pyx_t_5, __pyx_v_stronger_names, Py_NE)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 8433, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (__pyx_t_3) {
/* … */
    }
+08434:             merged.append(entry)
      __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_merged, __pyx_v_entry); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 8434, __pyx_L1_error)
+08435:     return merged
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_merged);
  __pyx_r = __pyx_v_merged;
  goto __pyx_L0;
 08436: 
 08437: 
 08438: # `df.attrs['questdb']` column kinds that an Arrow override can restore.
 08439: # The other kinds either survive on their storage type alone (VARCHAR,
 08440: # SYMBOL, TIMESTAMP, ...) or have no override to restore them with
 08441: # (BYTE / SHORT / INT, which the Arrow classifier widens). DATE is the
 08442: # one kind restored by reshaping the column rather than by an override,
 08443: # in `_dataframe_normalize_claimed_date`: no Arrow override names it,
 08444: # and the Arrow type it needs is the whole claim.
 08445: #: How long `QuestDB.close()` with no `timeout` waits while a lease is
 08446: #: outstanding before it stops waiting and raises. Generous, because a
 08447: #: lease held by another thread may be part-way through a large load
 08448: #: and that wait is the correct one; finite, because a lease held by
 08449: #: the calling thread, or by one that has since finished, is never
 08450: #: coming back and an unbounded wait there is a hang with no way out.
 08451: #: Hitting the bound leaves the handle closing; a later `close()`
 08452: #: resumes the wait. A `close()` with no `timeout` puts no bound on
 08453: #: calls in progress: a caller whose calls may never finish passes one.
+08454: cdef double _CLOSE_LEASE_WAIT_LIMIT_S = 60.0
  __pyx_v_7questdb_7_client__CLOSE_LEASE_WAIT_LIMIT_S = 60.0;
 08455: 
 08456: 
+08457: class _CloseTimeoutDefault:
  __pyx_t_17 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_mstate_global->__pyx_empty_tuple, __pyx_mstate_global->__pyx_n_u_CloseTimeoutDefault, __pyx_mstate_global->__pyx_n_u_CloseTimeoutDefault, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_What_QuestDB_close_gets_when_no); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8457, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
/* … */
  __pyx_t_25 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_mstate_global->__pyx_n_u_CloseTimeoutDefault, __pyx_mstate_global->__pyx_empty_tuple, __pyx_t_17, NULL, 0, 0); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 8457, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_CloseTimeoutDefault, __pyx_t_25) < (0)) __PYX_ERR(0, 8457, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 08458:     """What `QuestDB.close()` gets when no `timeout` is passed.
 08459: 
 08460:     `None` already means "no limit", so the default -- the lease bound
 08461:     above and no bound on calls -- needs a value of its own.
 08462:     """
+08463:     __slots__ = ()
  if (__Pyx_SetNameInClass(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_slots, __pyx_mstate_global->__pyx_empty_tuple) < (0)) __PYX_ERR(0, 8463, __pyx_L1_error)
 08464: 
+08465:     def __repr__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_20_CloseTimeoutDefault_1__repr__(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_20_CloseTimeoutDefault_1__repr__ = {"__repr__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_20_CloseTimeoutDefault_1__repr__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_20_CloseTimeoutDefault_1__repr__(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("__repr__ (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(0, 8465, __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(0, 8465, __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, "__repr__", 0) < (0)) __PYX_ERR(0, 8465, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__repr__", 1, 1, 1, i); __PYX_ERR(0, 8465, __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(0, 8465, __pyx_L3_error)
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__repr__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 8465, __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._CloseTimeoutDefault.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_20_CloseTimeoutDefault___repr__(__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_20_CloseTimeoutDefault___repr__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_20_CloseTimeoutDefault_1__repr__, 0, __pyx_mstate_global->__pyx_n_u_CloseTimeoutDefault___repr, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[207])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 8465, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25);
  #endif
  if (__Pyx_SetNameInClass(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_repr, __pyx_t_25) < (0)) __PYX_ERR(0, 8465, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
+08466:         return '<default>'
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_default);
  __pyx_r = __pyx_mstate_global->__pyx_kp_u_default;
  goto __pyx_L0;
 08467: 
 08468: 
+08469: _CLOSE_TIMEOUT_DEFAULT = _CloseTimeoutDefault()
  __pyx_t_25 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_CloseTimeoutDefault); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8469, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_25, NULL};
    __pyx_t_17 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8469, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_CLOSE_TIMEOUT_DEFAULT, __pyx_t_17) < (0)) __PYX_ERR(0, 8469, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 08470: 
 08471: 
+08472: cdef double _close_timeout_seconds(object timeout) except -1.0:
static double __pyx_f_7questdb_7_client__close_timeout_seconds(PyObject *__pyx_v_timeout) {
  double __pyx_v_seconds;
  double __pyx_r;
/* … */
  /* 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._close_timeout_seconds", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = (-1.0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08473:     """`QuestDB.close()`'s `timeout` as seconds, refused unless it is a
 08474:     number of seconds, 0 or more."""
 08475:     cdef double seconds
+08476:     if isinstance(timeout, bool) or not isinstance(timeout, _numbers.Real):
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_timeout, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); 
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_numbers); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8476, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Real); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8476, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_timeout, __pyx_t_4); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8476, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = (!__pyx_t_2);
  __pyx_t_1 = __pyx_t_5;
  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+08477:         raise TypeError(
    __pyx_t_3 = NULL;
+08478:             'close() timeout must be None or a number of seconds, not '
    __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_8, 3, 57 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7));
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8478, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_9 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_6};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_9, (2-__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;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8477, __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(0, 8477, __pyx_L1_error)
+08479:             f'{_fqn(type(timeout))}.')
    __pyx_t_6 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_timeout)))); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8479, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8479, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_close_timeout_must_be_None_or_a;
    __pyx_t_8[1] = __pyx_t_7;
    __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u__2;
+08480:     seconds = float(timeout)
  __pyx_t_10 = __Pyx_PyObject_AsDouble(__pyx_v_timeout); if (unlikely(__PYX_CHECK_FLOAT_EXCEPTION(__pyx_t_10, ((double)((double)-1))) && PyErr_Occurred())) __PYX_ERR(0, 8480, __pyx_L1_error)
  __pyx_v_seconds = __pyx_t_10;
 08481:     # Written so that NaN, which compares false either way, is refused.
+08482:     if not seconds >= 0.0:
  __pyx_t_1 = (!(__pyx_v_seconds >= 0.0));
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+08483:         raise ValueError(
    __pyx_t_6 = NULL;
+08484:             'close() timeout must be a number of seconds, 0 or more, '
    __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_8, 3, 60 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3));
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8484, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_9 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_7};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__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(0, 8483, __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(0, 8483, __pyx_L1_error)
+08485:             f'not {timeout!r}.')
    __pyx_t_3 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_timeout), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8485, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_close_timeout_must_be_a_number_o;
    __pyx_t_8[1] = __pyx_t_3;
    __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u__2;
+08486:     return seconds
  __pyx_r = __pyx_v_seconds;
  goto __pyx_L0;
 08487: 
 08488: 
+08489: cdef str _close_gave_up_message(
static PyObject *__pyx_f_7questdb_7_client__close_gave_up_message(double __pyx_v_waited, size_t __pyx_v_leases, size_t __pyx_v_calls) {
  PyObject *__pyx_v_message = 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_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb._client._close_gave_up_message", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_message);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08490:         double waited, size_t leases, size_t calls):
 08491:     """What a `close()` that ran out of time says it left behind."""
 08492:     cdef str message = (
+08493:         f'close() stopped waiting after {waited:g}s: {leases} '
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_waited); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_Format(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_g); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyUnicode_From_size_t(__pyx_v_leases, 0, ' ', 'd'); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
/* … */
  __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_4, 7, 30 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2) + 3 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1) + 44 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + 36, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2));
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_message = ((PyObject*)__pyx_t_5);
  __pyx_t_5 = 0;
 08494:         'outstanding sender()/reader() lease(s) and '
+08495:         f'{calls} call(s) in progress on this handle.')
  __pyx_t_3 = __Pyx_PyUnicode_From_size_t(__pyx_v_calls, 0, ' ', 'd'); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8495, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4[0] = __pyx_mstate_global->__pyx_kp_u_close_stopped_waiting_after;
  __pyx_t_4[1] = __pyx_t_2;
  __pyx_t_4[2] = __pyx_mstate_global->__pyx_kp_u_s_2;
  __pyx_t_4[3] = __pyx_t_1;
  __pyx_t_4[4] = __pyx_mstate_global->__pyx_kp_u_outstanding_sender_reader_lease;
  __pyx_t_4[5] = __pyx_t_3;
  __pyx_t_4[6] = __pyx_mstate_global->__pyx_kp_u_call_s_in_progress_on_this_hand;
+08496:     if leases:
  __pyx_t_6 = (__pyx_v_leases != 0);
  if (__pyx_t_6) {
/* … */
  }
+08497:         message += (
    __pyx_t_5 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_v_message, __pyx_mstate_global->__pyx_kp_u_A_lease_is_returned_only_by_the); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8497, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF_SET(__pyx_v_message, ((PyObject*)__pyx_t_5));
    __pyx_t_5 = 0;
 08498:             ' A lease is returned only by the code holding it -- one '
 08499:             'held by this thread, or by a thread that has finished, '
 08500:             'never will be.')
+08501:     if calls:
  __pyx_t_6 = (__pyx_v_calls != 0);
  if (__pyx_t_6) {
/* … */
  }
+08502:         message += (
    __pyx_t_5 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_v_message, __pyx_mstate_global->__pyx_kp_u_A_call_in_progress_returns_once); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8502, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF_SET(__pyx_v_message, ((PyObject*)__pyx_t_5));
    __pyx_t_5 = 0;
 08503:             " A call in progress returns once its work is done; close() "
 08504:             "can't interrupt it.")
+08505:     return message + (
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_v_message, __pyx_mstate_global->__pyx_kp_u_The_handle_stays_closing_and_ta); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8505, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_r = ((PyObject*)__pyx_t_5);
  __pyx_t_5 = 0;
  goto __pyx_L0;
 08506:         ' The handle stays closing and takes no new work. Call close() '
 08507:         'again once nothing is outstanding, or with a larger timeout -- '
 08508:         'timeout=None waits without a limit.')
 08509: 
 08510: 
+08511: cdef bint _in_bounded_wait_callback() except -1:
static int __pyx_f_7questdb_7_client__in_bounded_wait_callback(void) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client._in_bounded_wait_callback", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}
 08512:     """Whether a wait made on this thread must be bounded, because a lease
 08513:     or a call on another thread may be waiting for this thread to return: it
 08514:     is inside an OIDC renderer or persistence-warning callback, whose
 08515:     provider cannot supply a token until the callback returns, or inside a
 08516:     ``bearer_token_provider=`` call, which is the token request itself.
 08517: 
 08518:     Only the caller's own callback counts: on the main thread, another
 08519:     greenlet suspended inside a token callback does not make this one's
 08520:     waits bounded."""
+08521:     return (_oidc_callback_on_this_thread()
  __pyx_t_2 = __pyx_f_7questdb_7_client__oidc_callback_on_this_thread(); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8521, __pyx_L1_error)
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
+08522:             or _token_callback_in_this_context())
  __pyx_t_2 = __pyx_f_7questdb_7_client__token_callback_in_this_context();
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 08523: 
 08524: 
+08525: cdef str _bounded_wait_callback_name():
static PyObject *__pyx_f_7questdb_7_client__bounded_wait_callback_name(void) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client._bounded_wait_callback_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08526:     """The callback `_in_bounded_wait_callback` found, for messages."""
+08527:     if _oidc_callback_on_this_thread():
  __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_callback_on_this_thread(); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 8527, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+08528:         return 'an OIDC callback'
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_an_OIDC_callback);
    __pyx_r = __pyx_mstate_global->__pyx_kp_u_an_OIDC_callback;
    goto __pyx_L0;
+08529:     return 'a token-provider callback'
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_a_token_provider_callback);
  __pyx_r = __pyx_mstate_global->__pyx_kp_u_a_token_provider_callback;
  goto __pyx_L0;
 08530: 
 08531: 
+08532: cdef object _callback_wait_refused(str message):
static PyObject *__pyx_f_7questdb_7_client__callback_wait_refused(PyObject *__pyx_v_message) {
  PyObject *__pyx_v_exc = 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_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb._client._callback_wait_refused", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08533:     """The `InvalidApiCall` a bounded wait inside such a callback raises.
 08534: 
 08535:     Marked so that, if it escapes a ``bearer_token_provider=``'s
 08536:     ``token()``, it counts as a retryable failure rather than the terminal
 08537:     stop an `InvalidApiCall` from a provider otherwise means: the lease or
 08538:     pool it gave up on is busy, not broken (see `_tp_sink_exception`)."""
+08539:     cdef object exc = QuestDBError(QuestDBErrorCode.InvalidApiCall, message)
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8539, __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_v_message};
    __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(0, 8539, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_exc = __pyx_t_1;
  __pyx_t_1 = 0;
+08540:     exc._callback_wait_refused = True
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_callback_wait_refused, Py_True) < (0)) __PYX_ERR(0, 8540, __pyx_L1_error)
+08541:     return exc
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_exc);
  __pyx_r = __pyx_v_exc;
  goto __pyx_L0;
 08542: 
 08543: 
+08544: cdef str _close_callback_gave_up_message(
static PyObject *__pyx_f_7questdb_7_client__close_callback_gave_up_message(int __pyx_v_concurrent, size_t __pyx_v_leases, size_t __pyx_v_calls) {
  PyObject *__pyx_v_message = 0;
  PyObject *__pyx_v_callback = 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_AddTraceback("questdb._client._close_callback_gave_up_message", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_message);
  __Pyx_XDECREF(__pyx_v_callback);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08545:         bint concurrent, size_t leases, size_t calls):
 08546:     """What a `close()` called from inside such a callback says when its
 08547:     bounded wait runs out. `concurrent` says another `close()` had already
 08548:     started, and that close is left to finish the teardown."""
 08549:     cdef str message
+08550:     cdef str callback = _bounded_wait_callback_name()
  __pyx_t_1 = __pyx_f_7questdb_7_client__bounded_wait_callback_name(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8550, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_callback = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+08551:     if concurrent:
  if (__pyx_v_concurrent) {
/* … */
  }
+08552:         return (
    __Pyx_XDECREF(__pyx_r);
+08553:             'QuestDB.close() cannot wait for a concurrent close() on '
    __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, 78 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1) + 142, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1));
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8553, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_r = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;
+08554:             f'another thread inside {callback}: that close may be '
    __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_v_callback); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8554, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2[0] = __pyx_mstate_global->__pyx_kp_u_QuestDB_close_cannot_wait_for_a;
    __pyx_t_2[1] = __pyx_t_1;
    __pyx_t_2[2] = __pyx_mstate_global->__pyx_kp_u_that_close_may_be_waiting_for_a;
 08555:             'waiting for a lease that needs this callback to return. '
 08556:             'Return from the callback; the other close() finishes the '
 08557:             'teardown.')
 08558:     message = (
+08559:         f'QuestDB.close() cannot wait for {leases} outstanding lease(s) '
  __pyx_t_3 = __Pyx_PyUnicode_From_size_t(__pyx_v_leases, 0, ' ', 'd'); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8559, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
/* … */
  __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_4, 4, 32 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + 29 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1));
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8559, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_message = ((PyObject*)__pyx_t_5);
  __pyx_t_5 = 0;
+08560:         f'inside {callback}')
  __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_v_callback); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8560, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4[0] = __pyx_mstate_global->__pyx_kp_u_QuestDB_close_cannot_wait_for;
  __pyx_t_4[1] = __pyx_t_3;
  __pyx_t_4[2] = __pyx_mstate_global->__pyx_kp_u_outstanding_lease_s_inside;
  __pyx_t_4[3] = __pyx_t_1;
+08561:     if calls:
  __pyx_t_6 = (__pyx_v_calls != 0);
  if (__pyx_t_6) {
/* … */
  }
+08562:         message += f', or for {calls} call(s) in progress on this handle'
    __pyx_t_5 = __Pyx_PyUnicode_From_size_t(__pyx_v_calls, 0, ' ', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8562, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_2[0] = __pyx_mstate_global->__pyx_kp_u_or_for;
    __pyx_t_2[1] = __pyx_t_5;
    __pyx_t_2[2] = __pyx_mstate_global->__pyx_kp_u_call_s_in_progress_on_this_hand_2;
    __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, 9 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5) + 35, 127);
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8562, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_v_message, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8562, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_message, ((PyObject*)__pyx_t_5));
    __pyx_t_5 = 0;
+08563:     return message + (
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_v_message, __pyx_mstate_global->__pyx_kp_u_other_threads_hold_them_and_may); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8563, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_r = ((PyObject*)__pyx_t_5);
  __pyx_t_5 = 0;
  goto __pyx_L0;
 08564:         ': other threads hold them and may be waiting for this callback '
 08565:         'to return. The handle stays closing and takes no new work; '
 08566:         'return from the callback and call close() again to finish the '
 08567:         'teardown.')
 08568: 
 08569: 
+08570: def _debug_close_lease_wait_limit_s():
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_117_debug_close_lease_wait_limit_s(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_116_debug_close_lease_wait_limit_s, "The bound `QuestDB.close()` puts on waiting for leases.\n\n    Not part of the public API. Exposed so a test can reach the give-up\n    path in a second rather than a minute; the bound is deliberately\n    longer than any wait worth testing.\n    ");
static PyMethodDef __pyx_mdef_7questdb_7_client_117_debug_close_lease_wait_limit_s = {"_debug_close_lease_wait_limit_s", (PyCFunction)__pyx_pw_7questdb_7_client_117_debug_close_lease_wait_limit_s, METH_NOARGS, __pyx_doc_7questdb_7_client_116_debug_close_lease_wait_limit_s};
static PyObject *__pyx_pw_7questdb_7_client_117_debug_close_lease_wait_limit_s(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_close_lease_wait_limit_s (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_116_debug_close_lease_wait_limit_s(__pyx_self);

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

static PyObject *__pyx_pf_7questdb_7_client_116_debug_close_lease_wait_limit_s(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client._debug_close_lease_wait_limit_s", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_117_debug_close_lease_wait_limit_s, 0, __pyx_mstate_global->__pyx_n_u_debug_close_lease_wait_limit_s, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[208])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8570, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_close_lease_wait_limit_s, __pyx_t_17) < (0)) __PYX_ERR(0, 8570, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 08571:     """The bound `QuestDB.close()` puts on waiting for leases.
 08572: 
 08573:     Not part of the public API. Exposed so a test can reach the give-up
 08574:     path in a second rather than a minute; the bound is deliberately
 08575:     longer than any wait worth testing.
 08576:     """
+08577:     return _CLOSE_LEASE_WAIT_LIMIT_S
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_7questdb_7_client__CLOSE_LEASE_WAIT_LIMIT_S); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8577, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 08578: 
 08579: 
+08580: def _debug_set_close_lease_wait_limit_s(double seconds):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_119_debug_set_close_lease_wait_limit_s(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_118_debug_set_close_lease_wait_limit_s, "Set the bound above. Not part of the public API.");
static PyMethodDef __pyx_mdef_7questdb_7_client_119_debug_set_close_lease_wait_limit_s = {"_debug_set_close_lease_wait_limit_s", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_119_debug_set_close_lease_wait_limit_s, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_118_debug_set_close_lease_wait_limit_s};
static PyObject *__pyx_pw_7questdb_7_client_119_debug_set_close_lease_wait_limit_s(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
) {
  double __pyx_v_seconds;
  #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_set_close_lease_wait_limit_s (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_seconds,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(0, 8580, __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(0, 8580, __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_set_close_lease_wait_limit_s", 0) < (0)) __PYX_ERR(0, 8580, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_set_close_lease_wait_limit_s", 1, 1, 1, i); __PYX_ERR(0, 8580, __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(0, 8580, __pyx_L3_error)
    }
    __pyx_v_seconds = __Pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_seconds == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 8580, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_debug_set_close_lease_wait_limit_s", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 8580, __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_set_close_lease_wait_limit_s", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_118_debug_set_close_lease_wait_limit_s(__pyx_self, __pyx_v_seconds);
  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_118_debug_set_close_lease_wait_limit_s(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_seconds) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_119_debug_set_close_lease_wait_limit_s, 0, __pyx_mstate_global->__pyx_n_u_debug_set_close_lease_wait_limi, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[209])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8580, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_set_close_lease_wait_limi, __pyx_t_17) < (0)) __PYX_ERR(0, 8580, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 08581:     """Set the bound above. Not part of the public API."""
 08582:     global _CLOSE_LEASE_WAIT_LIMIT_S
+08583:     _CLOSE_LEASE_WAIT_LIMIT_S = seconds
  __pyx_v_7questdb_7_client__CLOSE_LEASE_WAIT_LIMIT_S = __pyx_v_seconds;
 08584: 
 08585: 
 08586: cdef dict _ATTRS_OVERRIDE_KINDS = {
+08587:     'ipv4': <int>qwp_arrow_override_ipv4,
  __pyx_t_17 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 8587, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_4 = __Pyx_PyLong_From_int(((int)qwp_arrow_override_ipv4)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8587, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_ipv4, __pyx_t_4) < (0)) __PYX_ERR(0, 8587, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+08588:     'char': <int>qwp_arrow_override_char,
  __pyx_t_4 = __Pyx_PyLong_From_int(((int)qwp_arrow_override_char)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8588, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_char_2, __pyx_t_4) < (0)) __PYX_ERR(0, 8587, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+08589:     'uuid': <int>qwp_arrow_override_uuid,
  __pyx_t_4 = __Pyx_PyLong_From_int(((int)qwp_arrow_override_uuid)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8589, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_uuid, __pyx_t_4) < (0)) __PYX_ERR(0, 8587, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+08590:     'long256': <int>qwp_arrow_override_long256,
  __pyx_t_4 = __Pyx_PyLong_From_int(((int)qwp_arrow_override_long256)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8590, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_long256, __pyx_t_4) < (0)) __PYX_ERR(0, 8587, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+08591:     'geohash': <int>qwp_arrow_override_geohash,
  __pyx_t_4 = __Pyx_PyLong_From_int(((int)qwp_arrow_override_geohash)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8591, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_geohash_2, __pyx_t_4) < (0)) __PYX_ERR(0, 8587, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__ATTRS_OVERRIDE_KINDS);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__ATTRS_OVERRIDE_KINDS, ((PyObject*)__pyx_t_17));
  __Pyx_GIVEREF(__pyx_t_17);
  __pyx_t_17 = 0;
 08592: }
 08593: 
 08594: 
+08595: cdef object _capsule_pandas_dtype(object dtypes, object name):
static PyObject *__pyx_f_7questdb_7_client__capsule_pandas_dtype(PyObject *__pyx_v_dtypes, PyObject *__pyx_v_name) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client._capsule_pandas_dtype", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08596:     """The pandas dtype of column `name`, or None where the frame has
 08597:     no such column.
 08598: 
 08599:     Takes the frame's `dtypes` rather than the frame: reading
 08600:     `frame.dtypes` builds a fresh Series every time, so looking it up
 08601:     per column was quadratic in the column count, on a path a streaming
 08602:     `iter_pandas` feeds per batch.
 08603:     """
+08604:     try:
  {
    /*try:*/ {
/* … */
    }
    __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_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;
  }
+08605:         return dtypes[name]
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_dtypes, __pyx_v_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8605, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_r = __pyx_t_4;
      __pyx_t_4 = 0;
      goto __pyx_L7_try_return;
+08606:     except Exception:
    __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_5) {
      __Pyx_ErrRestore(0,0,0);
+08607:         return None
      __Pyx_XDECREF(__pyx_r);
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      goto __pyx_L6_except_return;
    }
    goto __pyx_L5_except_error;
 08608: 
 08609: 
+08610: cdef object _capsule_arrow_type_of(object arrow_dtype, object dtype):
static PyObject *__pyx_f_7questdb_7_client__capsule_arrow_type_of(PyObject *__pyx_v_arrow_dtype, PyObject *__pyx_v_dtype) {
  PyObject *__pyx_v_ty = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb._client._capsule_arrow_type_of", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_ty);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08611:     """The Arrow storage type inside a pandas dtype, or None where the
 08612:     dtype holds none.
 08613: 
 08614:     A dtype with no Arrow type inside it is a real answer, separate
 08615:     from a column that is not in the frame: the column is there and
 08616:     cannot carry the claim. A pandas 3 string column reaches the
 08617:     capsule path this way, so the two have to be told apart.
 08618: 
 08619:     The caller has already established that `arrow_dtype` is a class,
 08620:     so a None here would be a third answer -- "cannot tell" -- that no
 08621:     caller is prepared to read.
 08622:     """
 08623:     cdef object ty
+08624:     if arrow_dtype is None or not isinstance(dtype, arrow_dtype):
  __pyx_t_2 = (__pyx_v_arrow_dtype == Py_None);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_dtype, __pyx_v_arrow_dtype); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8624, __pyx_L1_error)
  __pyx_t_3 = (!__pyx_t_2);
  __pyx_t_1 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+08625:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+08626:     ty = dtype.pyarrow_dtype
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_pyarrow_dtype); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8626, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_ty = __pyx_t_4;
  __pyx_t_4 = 0;
+08627:     if isinstance(ty, _PYARROW.lib.BaseExtensionType):
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_lib); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8627, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_BaseExtensionType); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8627, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_1 = PyObject_IsInstance(__pyx_v_ty, __pyx_t_5); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 8627, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__pyx_t_1) {
/* … */
  }
+08628:         ty = ty.storage_type
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_ty, __pyx_mstate_global->__pyx_n_u_storage_type); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8628, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF_SET(__pyx_v_ty, __pyx_t_5);
    __pyx_t_5 = 0;
+08629:     return ty
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_ty);
  __pyx_r = __pyx_v_ty;
  goto __pyx_L0;
 08630: 
 08631: 
+08632: cdef bint _attrs_override_fits(
static int __pyx_f_7questdb_7_client__attrs_override_fits(PyObject *__pyx_v_types, PyObject *__pyx_v_ty, PyObject *__pyx_v_kind, PyObject *__pyx_v_bits) {
  int __pyx_r;
  __Pyx_INCREF(__pyx_v_bits);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._attrs_override_fits", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_bits);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08633:         object types, object ty, str kind, object bits) except -1:
 08634:     """Whether the Arrow type can carry the claimed kind.
 08635: 
 08636:     Mirrors what the native client accepts, so a claim that no longer
 08637:     matches the column is dropped here instead of erroring there. UUID
 08638:     and LONG256 are held to their fixed widths: those are what the
 08639:     egress emits, and a variable-width binary claim would only be
 08640:     caught value by value at encode time.
 08641: 
 08642:     `types` is `pyarrow.types`, passed in so the caller reads it once
 08643:     for the whole frame rather than once per column.
 08644:     """
+08645:     if kind == 'ipv4':
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_ipv4, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 8645, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+08646:         return types.is_uint32(ty)
    __pyx_t_3 = __pyx_v_types;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
      __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_uint32, __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(0, 8646, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8646, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_1;
    goto __pyx_L0;
+08647:     if kind == 'char':
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_char_2, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 8647, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+08648:         return types.is_uint16(ty)
    __pyx_t_3 = __pyx_v_types;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
      __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_uint16, __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(0, 8648, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8648, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_1;
    goto __pyx_L0;
+08649:     if kind == 'uuid':
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_uuid, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 8649, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+08650:         return types.is_fixed_size_binary(ty) and ty.byte_width == 16
    __pyx_t_3 = __pyx_v_types;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
      __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_fixed_size_binary, __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(0, 8650, __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(0, 8650, __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_L6_bool_binop_done;
    }
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_ty, __pyx_mstate_global->__pyx_n_u_byte_width); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8650, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = (__Pyx_PyLong_BoolEqObjC(__pyx_t_2, __pyx_mstate_global->__pyx_int_16, 16, 0)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 8650, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_1 = __pyx_t_5;
    __pyx_L6_bool_binop_done:;
    __pyx_r = __pyx_t_1;
    goto __pyx_L0;
+08651:     if kind == 'long256':
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_long256, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 8651, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+08652:         return types.is_fixed_size_binary(ty) and ty.byte_width == 32
    __pyx_t_3 = __pyx_v_types;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
      __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_fixed_size_binary, __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(0, 8652, __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(0, 8652, __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_L9_bool_binop_done;
    }
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_ty, __pyx_mstate_global->__pyx_n_u_byte_width); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8652, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = (__Pyx_PyLong_BoolEqObjC(__pyx_t_2, __pyx_mstate_global->__pyx_int_32, 32, 0)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 8652, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_1 = __pyx_t_5;
    __pyx_L9_bool_binop_done:;
    __pyx_r = __pyx_t_1;
    goto __pyx_L0;
+08653:     if kind == 'geohash':
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_geohash_2, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 8653, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+08654:         if not _is_integral_not_bool(bits):
    __pyx_t_1 = __pyx_f_7questdb_7_client__is_integral_not_bool(__pyx_v_bits); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8654, __pyx_L1_error)
    __pyx_t_5 = (!__pyx_t_1);
    if (__pyx_t_5) {
/* … */
    }
+08655:             return False
      __pyx_r = 0;
      goto __pyx_L0;
+08656:         bits = int(bits)
    __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_v_bits); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8656, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF_SET(__pyx_v_bits, __pyx_t_2);
    __pyx_t_2 = 0;
+08657:         if bits < 1 or bits > 60:
    __pyx_t_2 = PyObject_RichCompare(__pyx_v_bits, __pyx_mstate_global->__pyx_int_1, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8657, __pyx_L1_error)
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 8657, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (!__pyx_t_1) {
    } else {
      __pyx_t_5 = __pyx_t_1;
      goto __pyx_L14_bool_binop_done;
    }
    __pyx_t_2 = PyObject_RichCompare(__pyx_v_bits, __pyx_mstate_global->__pyx_int_60, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8657, __pyx_L1_error)
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 8657, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_5 = __pyx_t_1;
    __pyx_L14_bool_binop_done:;
    if (__pyx_t_5) {
/* … */
    }
+08658:             return False
      __pyx_r = 0;
      goto __pyx_L0;
 08659:         # Signed Arrow carriers preserve their raw two's-complement bits,
 08660:         # including the sign bit. The same four limits are returned by
 08661:         # `_geohash_dtype_max_bits`.
+08662:         if types.is_int8(ty):
    __pyx_t_3 = __pyx_v_types;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
      __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_int8, __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(0, 8662, __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(0, 8662, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_5) {
/* … */
    }
+08663:             return bits <= 8
      __pyx_t_2 = PyObject_RichCompare(__pyx_v_bits, __pyx_mstate_global->__pyx_int_8, Py_LE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8663, __pyx_L1_error)
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8663, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_r = __pyx_t_5;
      goto __pyx_L0;
+08664:         if types.is_int16(ty):
    __pyx_t_3 = __pyx_v_types;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
      __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_int16, __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(0, 8664, __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(0, 8664, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_5) {
/* … */
    }
+08665:             return bits <= 16
      __pyx_t_2 = PyObject_RichCompare(__pyx_v_bits, __pyx_mstate_global->__pyx_int_16, Py_LE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8665, __pyx_L1_error)
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8665, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_r = __pyx_t_5;
      goto __pyx_L0;
+08666:         if types.is_int32(ty):
    __pyx_t_3 = __pyx_v_types;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
      __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_int32, __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(0, 8666, __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(0, 8666, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_5) {
/* … */
    }
+08667:             return bits <= 32
      __pyx_t_2 = PyObject_RichCompare(__pyx_v_bits, __pyx_mstate_global->__pyx_int_32, Py_LE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8667, __pyx_L1_error)
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8667, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_r = __pyx_t_5;
      goto __pyx_L0;
+08668:         if types.is_int64(ty):
    __pyx_t_3 = __pyx_v_types;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_ty};
      __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_int64, __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(0, 8668, __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(0, 8668, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_5) {
/* … */
    }
+08669:             return bits <= 60
      __pyx_t_2 = PyObject_RichCompare(__pyx_v_bits, __pyx_mstate_global->__pyx_int_60, Py_LE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8669, __pyx_L1_error)
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8669, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_r = __pyx_t_5;
      goto __pyx_L0;
+08670:         return False
    __pyx_r = 0;
    goto __pyx_L0;
+08671:     return False
  __pyx_r = 0;
  goto __pyx_L0;
 08672: 
 08673: 
+08674: cdef object _capsule_roundtrip_overrides(object frame, object dtypes):
static PyObject *__pyx_f_7questdb_7_client__capsule_roundtrip_overrides(PyObject *__pyx_v_frame, PyObject *__pyx_v_dtypes) {
  PyObject *__pyx_v_out = 0;
  PyObject *__pyx_v_cols_meta = 0;
  PyObject *__pyx_v_meta = 0;
  PyObject *__pyx_v_ty = 0;
  PyObject *__pyx_v_bits = 0;
  PyObject *__pyx_v_arrow_dtype = 0;
  PyObject *__pyx_v_types = 0;
  PyObject *__pyx_v_dtype = 0;
  PyObject *__pyx_v_kind = 0;
  int __pyx_v_kind_int;
  int __pyx_v_arg_int;
  PyObject *__pyx_v_name = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_INCREF(__pyx_v_dtypes);
/* … */
  /* 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_10);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("questdb._client._capsule_roundtrip_overrides", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_out);
  __Pyx_XDECREF(__pyx_v_cols_meta);
  __Pyx_XDECREF(__pyx_v_meta);
  __Pyx_XDECREF(__pyx_v_ty);
  __Pyx_XDECREF(__pyx_v_bits);
  __Pyx_XDECREF(__pyx_v_arrow_dtype);
  __Pyx_XDECREF(__pyx_v_types);
  __Pyx_XDECREF(__pyx_v_dtype);
  __Pyx_XDECREF(__pyx_v_kind);
  __Pyx_XDECREF(__pyx_v_name);
  __Pyx_XDECREF(__pyx_v_dtypes);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08675:     """Arrow overrides rebuilt from the `df.attrs['questdb']` metadata
 08676:     that `QueryResult.to_pandas()` attaches.
 08677: 
 08678:     A pandas dtype holds an Arrow type and no field, so the
 08679:     `questdb.column_type` claim the egress stamps on the field is gone
 08680:     by the time a frame comes back in; without it a UUID or LONG256
 08681:     column would go back out as BINARY and IPV4 / CHAR / GEOHASH as
 08682:     plain integers. The claim recalls what the frame held when it was
 08683:     read, so a column since dropped, renamed or retyped is skipped
 08684:     rather than rejected.
 08685:     """
+08686:     cdef list out = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8686, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 08687:     cdef object cols_meta, meta, ty, bits, arrow_dtype, types
 08688:     cdef object dtype
 08689:     cdef str kind
 08690:     cdef int kind_int
 08691:     cdef int arg_int
+08692:     if not _is_pandas_dataframe_object(frame):
  __pyx_t_2 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_frame); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8692, __pyx_L1_error)
  __pyx_t_3 = (!__pyx_t_2);
  if (__pyx_t_3) {
/* … */
  }
+08693:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;
+08694:     cols_meta = _roundtrip_columns_meta(frame)
  __pyx_t_1 = __pyx_f_7questdb_7_client__roundtrip_columns_meta(__pyx_v_frame); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8694, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_cols_meta = __pyx_t_1;
  __pyx_t_1 = 0;
+08695:     if not cols_meta:
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_cols_meta); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 8695, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_3);
  if (__pyx_t_2) {
/* … */
  }
+08696:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;
+08697:     _dataframe_may_import_deps()
  __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8697, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+08698:     if not _dataframe_try_import_pyarrow():
  __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_try_import_pyarrow(); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8698, __pyx_L1_error)
  __pyx_t_3 = (!__pyx_t_2);
  if (__pyx_t_3) {
/* … */
  }
+08699:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;
 08700:     # Read once for the whole frame, not once per column; the capsule
 08701:     # path hands over the `df.dtypes` it already read.
+08702:     if dtypes is None:
  __pyx_t_3 = (__pyx_v_dtypes == Py_None);
  if (__pyx_t_3) {
/* … */
  }
+08703:         dtypes = frame.dtypes
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_dtypes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8703, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_dtypes, __pyx_t_1);
    __pyx_t_1 = 0;
+08704:     arrow_dtype = getattr(_PANDAS, 'ArrowDtype', None)
  __pyx_t_1 = __pyx_v_7questdb_7_client__PANDAS;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_GetAttr3(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ArrowDtype, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8704, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_arrow_dtype = __pyx_t_4;
  __pyx_t_4 = 0;
+08705:     if arrow_dtype is None:
  __pyx_t_3 = (__pyx_v_arrow_dtype == Py_None);
  if (__pyx_t_3) {
/* … */
  }
 08706:         # No `ArrowDtype` in this pandas, so no column can be shown to
 08707:         # hold an Arrow type and every claim would be reported as one
 08708:         # the column cannot carry. That is "cannot tell", not "cannot
 08709:         # carry". A frame reaches here through `__arrow_c_stream__`,
 08710:         # which arrived in the same pandas `ArrowDtype` did, so this is
 08711:         # the shape of the answer rather than a case that comes up.
+08712:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;
+08713:     types = _PYARROW.types
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8713, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_types = __pyx_t_4;
  __pyx_t_4 = 0;
+08714:     for name, meta in cols_meta.items():
  __pyx_t_5 = 0;
  if (unlikely(__pyx_v_cols_meta == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
    __PYX_ERR(0, 8714, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_dict_iterator(__pyx_v_cols_meta, 0, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_6), (&__pyx_t_7)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8714, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __pyx_t_4 = __pyx_t_1;
  __pyx_t_1 = 0;
  while (1) {
    __pyx_t_9 = __Pyx_dict_iter_next(__pyx_t_4, __pyx_t_6, &__pyx_t_5, &__pyx_t_1, &__pyx_t_8, NULL, __pyx_t_7);
    if (unlikely(__pyx_t_9 == 0)) break;
    if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 8714, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_1);
    __pyx_t_1 = 0;
    __Pyx_XDECREF_SET(__pyx_v_meta, __pyx_t_8);
    __pyx_t_8 = 0;
+08715:         if not isinstance(name, str):
    __pyx_t_3 = PyUnicode_Check(__pyx_v_name); 
    __pyx_t_2 = (!__pyx_t_3);
    if (__pyx_t_2) {
/* … */
    }
+08716:             continue
      goto __pyx_L8_continue;
+08717:         kind = _roundtrip_kind(meta)
    __pyx_t_8 = __pyx_f_7questdb_7_client__roundtrip_kind(__pyx_v_meta); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8717, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_XDECREF_SET(__pyx_v_kind, ((PyObject*)__pyx_t_8));
    __pyx_t_8 = 0;
+08718:         if kind is None or kind not in _ATTRS_OVERRIDE_KINDS:
    __pyx_t_3 = (__pyx_v_kind == ((PyObject*)Py_None));
    if (!__pyx_t_3) {
    } else {
      __pyx_t_2 = __pyx_t_3;
      goto __pyx_L12_bool_binop_done;
    }
    if (unlikely(__pyx_v_7questdb_7_client__ATTRS_OVERRIDE_KINDS == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 8718, __pyx_L1_error)
    }
    __pyx_t_3 = (__Pyx_PyDict_ContainsTF(__pyx_v_kind, __pyx_v_7questdb_7_client__ATTRS_OVERRIDE_KINDS, Py_NE)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 8718, __pyx_L1_error)
    __pyx_t_2 = __pyx_t_3;
    __pyx_L12_bool_binop_done:;
    if (__pyx_t_2) {
/* … */
    }
+08719:             continue
      goto __pyx_L8_continue;
+08720:         kind_int = <int>_ATTRS_OVERRIDE_KINDS[kind]
    if (unlikely(__pyx_v_7questdb_7_client__ATTRS_OVERRIDE_KINDS == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 8720, __pyx_L1_error)
    }
    __pyx_t_8 = __Pyx_PyDict_GetItem(__pyx_v_7questdb_7_client__ATTRS_OVERRIDE_KINDS, __pyx_v_kind); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8720, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = __Pyx_PyLong_As_int(__pyx_t_8); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8720, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_v_kind_int = ((int)__pyx_t_9);
+08721:         bits = meta.get('precision_bits') or 0
    __pyx_t_10 = __pyx_v_meta;
    __Pyx_INCREF(__pyx_t_10);
    __pyx_t_11 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_mstate_global->__pyx_n_u_precision_bits};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8721, __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(0, 8721, __pyx_L1_error)
    if (!__pyx_t_2) {
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else {
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_8 = __pyx_t_1;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L14_bool_binop_done;
    }
    __pyx_t_1 = __Pyx_PyLong_From_long(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8721, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_8 = __pyx_t_1;
    __pyx_t_1 = 0;
    __pyx_L14_bool_binop_done:;
    __Pyx_XDECREF_SET(__pyx_v_bits, __pyx_t_8);
    __pyx_t_8 = 0;
+08722:         dtype = _capsule_pandas_dtype(dtypes, name)
    __pyx_t_8 = __pyx_f_7questdb_7_client__capsule_pandas_dtype(__pyx_v_dtypes, __pyx_v_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8722, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_8);
    __pyx_t_8 = 0;
+08723:         if dtype is None:
    __pyx_t_2 = (__pyx_v_dtype == Py_None);
    if (__pyx_t_2) {
/* … */
    }
 08724:             # The column is gone or renamed. That is the drift the
 08725:             # claim is meant to survive quietly.
+08726:             continue
      goto __pyx_L8_continue;
+08727:         ty = _capsule_arrow_type_of(arrow_dtype, dtype)
    __pyx_t_8 = __pyx_f_7questdb_7_client__capsule_arrow_type_of(__pyx_v_arrow_dtype, __pyx_v_dtype); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8727, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_XDECREF_SET(__pyx_v_ty, __pyx_t_8);
    __pyx_t_8 = 0;
+08728:         if ty is None:
    __pyx_t_2 = (__pyx_v_ty == Py_None);
    if (__pyx_t_2) {
/* … */
    }
 08729:             # The column is here in a dtype that holds no Arrow type --
 08730:             # a pandas 3 string column, say -- so no claim of any kind
 08731:             # fits it. The NumPy planner answers the same frame with a
 08732:             # log notice, and both planners answering alike is the point.
+08733:             _log_roundtrip_claim_dropped(name, kind, dtype)
      __pyx_t_8 = __pyx_f_7questdb_7_client__log_roundtrip_claim_dropped(__pyx_v_name, __pyx_v_kind, __pyx_v_dtype); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8733, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+08734:             continue
      goto __pyx_L8_continue;
+08735:         if not _attrs_override_fits(types, ty, kind, bits):
    __pyx_t_2 = __pyx_f_7questdb_7_client__attrs_override_fits(__pyx_v_types, __pyx_v_ty, __pyx_v_kind, __pyx_v_bits); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8735, __pyx_L1_error)
    __pyx_t_3 = (!__pyx_t_2);
    if (__pyx_t_3) {
/* … */
    }
+08736:             _log_roundtrip_claim_dropped(name, kind, ty)
      __pyx_t_8 = __pyx_f_7questdb_7_client__log_roundtrip_claim_dropped(__pyx_v_name, __pyx_v_kind, __pyx_v_ty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8736, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+08737:             continue
      goto __pyx_L8_continue;
 08738:         # Only GEOHASH takes an argument, and `_attrs_override_fits` has
 08739:         # already held it to a whole number in 1..=60.
+08740:         arg_int = int(bits) if kind == 'geohash' else 0
    __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(0, 8740, __pyx_L1_error)
    if (__pyx_t_3) {
      __pyx_t_8 = __Pyx_PyNumber_Int(__pyx_v_bits); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8740, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_12 = __Pyx_PyLong_As_int(__pyx_t_8); if (unlikely((__pyx_t_12 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8740, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_9 = __pyx_t_12;
    } else {
      __pyx_t_9 = 0;
    }
    __pyx_v_arg_int = __pyx_t_9;
+08741:         out.append((name.encode('utf-8'), kind_int, arg_int))
    __pyx_t_1 = __pyx_v_name;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_11 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_mstate_global->__pyx_kp_u_utf_8};
      __pyx_t_8 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_encode, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8741, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
    }
    __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_kind_int); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8741, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_10 = __Pyx_PyLong_From_int(__pyx_v_arg_int); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8741, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_13 = PyTuple_New(3); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 8741, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_GIVEREF(__pyx_t_8);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_8) != (0)) __PYX_ERR(0, 8741, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_1);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_1) != (0)) __PYX_ERR(0, 8741, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_10);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_13, 2, __pyx_t_10) != (0)) __PYX_ERR(0, 8741, __pyx_L1_error);
    __pyx_t_8 = 0;
    __pyx_t_1 = 0;
    __pyx_t_10 = 0;
    __pyx_t_14 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_13); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(0, 8741, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_L8_continue:;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+08742:     return out
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;
 08743: 
 08744: 
+08745: cdef bint _is_pandas_dataframe_object(object obj):
static int __pyx_f_7questdb_7_client__is_pandas_dataframe_object(PyObject *__pyx_v_obj) {
  PyObject *__pyx_v_cls = 0;
  PyObject *__pyx_v_module = 0;
  PyObject *__pyx_v_name = 0;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("questdb._client._is_pandas_dataframe_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_cls);
  __Pyx_XDECREF(__pyx_v_module);
  __Pyx_XDECREF(__pyx_v_name);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08746:     cdef object cls
 08747:     cdef object module
 08748:     cdef object name
+08749:     if _PANDAS is not None and isinstance(obj, _PANDAS.DataFrame):
  __pyx_t_2 = (__pyx_v_7questdb_7_client__PANDAS != Py_None);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PANDAS, __pyx_mstate_global->__pyx_n_u_DataFrame); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8749, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_obj, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8749, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+08750:         return True
    __pyx_r = 1;
    goto __pyx_L0;
+08751:     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_L11_try_end;
    __pyx_L6_error:;
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
    __pyx_L8_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_L1_error;
    __pyx_L10_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_L0;
    __pyx_L9_except_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_L0;
    __pyx_L11_try_end:;
  }
+08752:         for cls in type(obj).__mro__:
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_obj)), __pyx_mstate_global->__pyx_n_u_mro); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8752, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) {
        __pyx_t_7 = __pyx_t_3; __Pyx_INCREF(__pyx_t_7);
        __pyx_t_8 = 0;
        __pyx_t_9 = NULL;
      } else {
        __pyx_t_8 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8752, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_9 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8752, __pyx_L6_error)
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      for (;;) {
        if (likely(!__pyx_t_9)) {
          if (likely(PyList_CheckExact(__pyx_t_7))) {
            {
              Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_7);
              #if !CYTHON_ASSUME_SAFE_SIZE
              if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8752, __pyx_L6_error)
              #endif
              if (__pyx_t_8 >= __pyx_temp) break;
            }
            __pyx_t_3 = __Pyx_PyList_GetItemRefFast(__pyx_t_7, __pyx_t_8, __Pyx_ReferenceSharing_OwnStrongReference);
            ++__pyx_t_8;
          } else {
            {
              Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_7);
              #if !CYTHON_ASSUME_SAFE_SIZE
              if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8752, __pyx_L6_error)
              #endif
              if (__pyx_t_8 >= __pyx_temp) break;
            }
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_3 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_8));
            #else
            __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_7, __pyx_t_8);
            #endif
            ++__pyx_t_8;
          }
          if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8752, __pyx_L6_error)
        } else {
          __pyx_t_3 = __pyx_t_9(__pyx_t_7);
          if (unlikely(!__pyx_t_3)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 8752, __pyx_L6_error)
              PyErr_Clear();
            }
            break;
          }
        }
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_XDECREF_SET(__pyx_v_cls, __pyx_t_3);
        __pyx_t_3 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+08753:             module = getattr(cls, '__module__', '')
        __pyx_t_3 = __Pyx_GetAttr3(__pyx_v_cls, __pyx_mstate_global->__pyx_n_u_module, __pyx_mstate_global->__pyx_kp_u__7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8753, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_XDECREF_SET(__pyx_v_module, __pyx_t_3);
        __pyx_t_3 = 0;
+08754:             name = getattr(cls, '__name__', '')
        __pyx_t_3 = __Pyx_GetAttr3(__pyx_v_cls, __pyx_mstate_global->__pyx_n_u_name_2, __pyx_mstate_global->__pyx_kp_u__7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8754, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_3);
        __pyx_t_3 = 0;
+08755:             if (name == 'DataFrame' and
        __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_name, __pyx_mstate_global->__pyx_n_u_DataFrame, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8755, __pyx_L6_error)
        if (__pyx_t_2) {
        } else {
          __pyx_t_1 = __pyx_t_2;
          goto __pyx_L15_bool_binop_done;
        }
/* … */
        if (__pyx_t_1) {
/* … */
        }
+08756:                     isinstance(module, str) and
        __pyx_t_2 = PyUnicode_Check(__pyx_v_module); 
        if (__pyx_t_2) {
        } else {
          __pyx_t_1 = __pyx_t_2;
          goto __pyx_L15_bool_binop_done;
        }
+08757:                     (module == 'pandas' or module.startswith('pandas.'))):
        __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_module, __pyx_mstate_global->__pyx_n_u_pandas_2, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8757, __pyx_L6_error)
        if (!__pyx_t_2) {
        } else {
          __pyx_t_1 = __pyx_t_2;
          goto __pyx_L15_bool_binop_done;
        }
        __pyx_t_10 = __pyx_v_module;
        __Pyx_INCREF(__pyx_t_10);
        __pyx_t_11 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_mstate_global->__pyx_kp_u_pandas_3};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_startswith, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8757, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8757, __pyx_L6_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_1 = __pyx_t_2;
        __pyx_L15_bool_binop_done:;
+08758:                 return True
          __pyx_r = 1;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          goto __pyx_L10_try_return;
+08759:     except Exception:
    __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_12) {
      __Pyx_ErrRestore(0,0,0);
+08760:         return False
      __pyx_r = 0;
      goto __pyx_L9_except_return;
    }
    goto __pyx_L8_except_error;
+08761:     return False
  __pyx_r = 0;
  goto __pyx_L0;
 08762: 
 08763: 
+08764: cdef object _MASKED_DTYPE = None
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__MASKED_DTYPE);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__MASKED_DTYPE, Py_None);
  __Pyx_GIVEREF(Py_None);
+08765: cdef bint _MASKED_DTYPE_READY = False
  __pyx_v_7questdb_7_client__MASKED_DTYPE_READY = 0;
 08766: 
 08767: 
+08768: cdef object _pandas_masked_dtype():
static PyObject *__pyx_f_7questdb_7_client__pandas_masked_dtype(void) {
  PyObject *__pyx_v_BaseMaskedDtype = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("questdb._client._pandas_masked_dtype", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_BaseMaskedDtype);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08769:     global _MASKED_DTYPE, _MASKED_DTYPE_READY
+08770:     if not _MASKED_DTYPE_READY:
  __pyx_t_1 = (!__pyx_v_7questdb_7_client__MASKED_DTYPE_READY);
  if (__pyx_t_1) {
/* … */
  }
+08771:         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_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 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_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:;
    }
+08772:             from pandas.core.arrays.masked import BaseMaskedDtype
        {
          PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_BaseMaskedDtype};
          __pyx_t_6 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_pandas_core_arrays_masked, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8772, __pyx_L4_error)
        }
        __pyx_t_5 = __pyx_t_6;
        __Pyx_GOTREF(__pyx_t_5);
        {
          PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_BaseMaskedDtype};
          __pyx_t_7 = 0; {
            __pyx_t_8 = __Pyx_ImportFrom(__pyx_t_5, __pyx_imported_names[__pyx_t_7]); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8772, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_8);
            switch (__pyx_t_7) {
              case 0:
              __Pyx_INCREF(__pyx_t_8);
              __pyx_v_BaseMaskedDtype = __pyx_t_8;
              break;
              default:;
            }
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          }
        }
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+08773:             _MASKED_DTYPE = BaseMaskedDtype
        __Pyx_INCREF(__pyx_v_BaseMaskedDtype);
        __Pyx_XGOTREF(__pyx_v_7questdb_7_client__MASKED_DTYPE);
        __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__MASKED_DTYPE, __pyx_v_BaseMaskedDtype);
        __Pyx_GIVEREF(__pyx_v_BaseMaskedDtype);
+08774:         except Exception:
      __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
      if (__pyx_t_9) {
        __Pyx_ErrRestore(0,0,0);
+08775:             _MASKED_DTYPE = ()
        __Pyx_INCREF(__pyx_mstate_global->__pyx_empty_tuple);
        __Pyx_XGOTREF(__pyx_v_7questdb_7_client__MASKED_DTYPE);
        __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__MASKED_DTYPE, __pyx_mstate_global->__pyx_empty_tuple);
        __Pyx_GIVEREF(__pyx_mstate_global->__pyx_empty_tuple);
        goto __pyx_L5_exception_handled;
      }
      goto __pyx_L6_except_error;
+08776:         _MASKED_DTYPE_READY = True
    __pyx_v_7questdb_7_client__MASKED_DTYPE_READY = 1;
+08777:     return _MASKED_DTYPE
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_7questdb_7_client__MASKED_DTYPE);
  __pyx_r = __pyx_v_7questdb_7_client__MASKED_DTYPE;
  goto __pyx_L0;
 08778: 
 08779: 
+08780: cdef bint _pandas_dtypes_require_manual_planner(object dtypes) except -1:
static int __pyx_f_7questdb_7_client__pandas_dtypes_require_manual_planner(PyObject *__pyx_v_dtypes) {
  PyObject *__pyx_v_dtype = 0;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("questdb._client._pandas_dtypes_require_manual_planner", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dtype);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08781:     # A fully Arrow-backed frame takes the zero-copy capsule path; any
 08782:     # numpy / object / masked / categorical column routes the whole frame to
 08783:     # the manual planner (which ingests those directly and the Arrow-backed
 08784:     # columns via the arrow-import path). `dtypes` is the frame's
 08785:     # `df.dtypes`.
 08786:     cdef object dtype
+08787:     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:;
  }
+08788:         for dtype in dtypes:
      if (likely(PyList_CheckExact(__pyx_v_dtypes)) || PyTuple_CheckExact(__pyx_v_dtypes)) {
        __pyx_t_4 = __pyx_v_dtypes; __Pyx_INCREF(__pyx_t_4);
        __pyx_t_5 = 0;
        __pyx_t_6 = NULL;
      } else {
        __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_dtypes); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8788, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_6 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8788, __pyx_L3_error)
      }
      for (;;) {
        if (likely(!__pyx_t_6)) {
          if (likely(PyList_CheckExact(__pyx_t_4))) {
            {
              Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4);
              #if !CYTHON_ASSUME_SAFE_SIZE
              if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8788, __pyx_L3_error)
              #endif
              if (__pyx_t_5 >= __pyx_temp) break;
            }
            __pyx_t_7 = __Pyx_PyList_GetItemRefFast(__pyx_t_4, __pyx_t_5, __Pyx_ReferenceSharing_OwnStrongReference);
            ++__pyx_t_5;
          } else {
            {
              Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_4);
              #if !CYTHON_ASSUME_SAFE_SIZE
              if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 8788, __pyx_L3_error)
              #endif
              if (__pyx_t_5 >= __pyx_temp) break;
            }
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_7 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5));
            #else
            __pyx_t_7 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_5);
            #endif
            ++__pyx_t_5;
          }
          if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8788, __pyx_L3_error)
        } else {
          __pyx_t_7 = __pyx_t_6(__pyx_t_4);
          if (unlikely(!__pyx_t_7)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 8788, __pyx_L3_error)
              PyErr_Clear();
            }
            break;
          }
        }
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_XDECREF_SET(__pyx_v_dtype, __pyx_t_7);
        __pyx_t_7 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+08789:             if not _pandas_dtype_is_arrow(dtype):
        __pyx_t_8 = __pyx_f_7questdb_7_client__pandas_dtype_is_arrow(__pyx_v_dtype); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 8789, __pyx_L3_error)
        __pyx_t_9 = (!__pyx_t_8);
        if (__pyx_t_9) {
/* … */
        }
+08790:                 return True
          __pyx_r = 1;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          goto __pyx_L7_try_return;
+08791:     except Exception:
    __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_10) {
      __Pyx_ErrRestore(0,0,0);
+08792:         return True
      __pyx_r = 1;
      goto __pyx_L6_except_return;
    }
    goto __pyx_L5_except_error;
+08793:     return False
  __pyx_r = 0;
  goto __pyx_L0;
 08794: 
 08795: 
+08796: cdef bint _pandas_dtype_is_arrow(object dtype) except -1:
static int __pyx_f_7questdb_7_client__pandas_dtype_is_arrow(PyObject *__pyx_v_dtype) {
  PyObject *__pyx_v_arrow_dtype = 0;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client._pandas_dtype_is_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_arrow_dtype);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_7questdb_7_client_36_schema_overrides_need_arrow_message_2generator7(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
+08797:     cdef object arrow_dtype = getattr(_PANDAS, 'ArrowDtype', None)
  __pyx_t_1 = __pyx_v_7questdb_7_client__PANDAS;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_GetAttr3(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ArrowDtype, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8797, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_arrow_dtype = __pyx_t_2;
  __pyx_t_2 = 0;
+08798:     if arrow_dtype is not None and isinstance(dtype, arrow_dtype):
  __pyx_t_4 = (__pyx_v_arrow_dtype != Py_None);
  if (__pyx_t_4) {
  } else {
    __pyx_t_3 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = PyObject_IsInstance(__pyx_v_dtype, __pyx_v_arrow_dtype); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 8798, __pyx_L1_error)
  __pyx_t_3 = __pyx_t_4;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_3) {
/* … */
  }
+08799:         return True
    __pyx_r = 1;
    goto __pyx_L0;
+08800:     return (isinstance(dtype, _PANDAS.StringDtype)
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PANDAS, __pyx_mstate_global->__pyx_n_u_StringDtype); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8800, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyObject_IsInstance(__pyx_v_dtype, __pyx_t_2); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 8800, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_4) {
  } else {
    __pyx_t_3 = __pyx_t_4;
    goto __pyx_L6_bool_binop_done;
  }
+08801:             and getattr(dtype, 'storage', None) == 'pyarrow')
  __pyx_t_2 = __Pyx_GetAttr3(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_storage, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8801, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = (__Pyx_PyUnicode_Equals(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_pyarrow, Py_EQ)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 8801, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_3 = __pyx_t_4;
  __pyx_L6_bool_binop_done:;
  __pyx_r = __pyx_t_3;
  goto __pyx_L0;
 08802: 
 08803: 
+08804: cdef str _schema_overrides_need_arrow_message(object df):
static PyObject *__pyx_f_7questdb_7_client__schema_overrides_need_arrow_message(PyObject *__pyx_v_df) {
  PyObject *__pyx_v_names = 0;
  PyObject *__pyx_v_listed = 0;
  PyObject *__pyx_9genexpr23__pyx_v_name = NULL;
  PyObject *__pyx_9genexpr23__pyx_v_dtype = NULL;
  PyObject *__pyx_gb_7questdb_7_client_36_schema_overrides_need_arrow_message_2generator7 = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("questdb._client._schema_overrides_need_arrow_message", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_names);
  __Pyx_XDECREF(__pyx_v_listed);
  __Pyx_XDECREF(__pyx_9genexpr23__pyx_v_name);
  __Pyx_XDECREF(__pyx_9genexpr23__pyx_v_dtype);
  __Pyx_XDECREF(__pyx_gb_7questdb_7_client_36_schema_overrides_need_arrow_message_2generator7);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08805:     """Why `schema_overrides` cannot apply to `df`, naming the pandas
 08806:     columns that are not Arrow-backed when there are any."""
+08807:     cdef list names = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8807, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_names = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 08808:     cdef str listed
+08809:     if _is_pandas_dataframe_object(df):
  __pyx_t_2 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_df); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8809, __pyx_L1_error)
  if (__pyx_t_2) {
/* … */
  }
+08810:         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_L9_try_end;
      __pyx_L4_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_6); __pyx_t_6 = 0;
/* … */
      __pyx_L6_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_L5_exception_handled:;
      __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);
      __pyx_L9_try_end:;
    }
+08811:             names = [
        { /* enter inner scope */
          __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8811, __pyx_L12_error)
          __Pyx_GOTREF(__pyx_t_1);
+08812:                 name for name, dtype in df.dtypes.items()
          __pyx_t_7 = 0;
          __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_dtypes); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8812, __pyx_L12_error)
          __Pyx_GOTREF(__pyx_t_10);
          if (unlikely(__pyx_t_10 == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
            __PYX_ERR(0, 8812, __pyx_L12_error)
          }
          __pyx_t_11 = __Pyx_dict_iterator(__pyx_t_10, 0, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_8), (&__pyx_t_9)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8812, __pyx_L12_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_XDECREF(__pyx_t_6);
          __pyx_t_6 = __pyx_t_11;
          __pyx_t_11 = 0;
          while (1) {
            __pyx_t_12 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_8, &__pyx_t_7, &__pyx_t_11, &__pyx_t_10, NULL, __pyx_t_9);
            if (unlikely(__pyx_t_12 == 0)) break;
            if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 8812, __pyx_L12_error)
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_GOTREF(__pyx_t_10);
            __Pyx_XDECREF_SET(__pyx_9genexpr23__pyx_v_name, __pyx_t_11);
            __pyx_t_11 = 0;
            __Pyx_XDECREF_SET(__pyx_9genexpr23__pyx_v_dtype, __pyx_t_10);
            __pyx_t_10 = 0;
/* … */
              if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_9genexpr23__pyx_v_name))) __PYX_ERR(0, 8811, __pyx_L12_error)
+08813:                 if not _pandas_dtype_is_arrow(dtype)]
            __pyx_t_2 = __pyx_f_7questdb_7_client__pandas_dtype_is_arrow(__pyx_9genexpr23__pyx_v_dtype); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 8813, __pyx_L12_error)
            __pyx_t_13 = (!__pyx_t_2);
            if (__pyx_t_13) {
/* … */
            }
          }
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_XDECREF(__pyx_9genexpr23__pyx_v_dtype); __pyx_9genexpr23__pyx_v_dtype = 0;
          __Pyx_XDECREF(__pyx_9genexpr23__pyx_v_name); __pyx_9genexpr23__pyx_v_name = 0;
          goto __pyx_L16_exit_scope;
          __pyx_L12_error:;
          __Pyx_XDECREF(__pyx_9genexpr23__pyx_v_dtype); __pyx_9genexpr23__pyx_v_dtype = 0;
          __Pyx_XDECREF(__pyx_9genexpr23__pyx_v_name); __pyx_9genexpr23__pyx_v_name = 0;
          goto __pyx_L4_error;
          __pyx_L16_exit_scope:;
        } /* exit inner scope */
        __Pyx_DECREF_SET(__pyx_v_names, ((PyObject*)__pyx_t_1));
        __pyx_t_1 = 0;
+08814:         except Exception:
      __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
      if (__pyx_t_9) {
        __Pyx_AddTraceback("questdb._client._schema_overrides_need_arrow_message", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_10) < 0) __PYX_ERR(0, 8814, __pyx_L6_except_error)
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_10);
+08815:             names = []
        __pyx_t_11 = PyList_New(0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8815, __pyx_L6_except_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF_SET(__pyx_v_names, ((PyObject*)__pyx_t_11));
        __pyx_t_11 = 0;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        goto __pyx_L5_exception_handled;
      }
      goto __pyx_L6_except_error;
+08816:     listed = ''
  __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u__7);
  __pyx_v_listed = __pyx_mstate_global->__pyx_kp_u__7;
+08817:     if names:
  {
    Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v_names);
    if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 8817, __pyx_L1_error)
    __pyx_t_13 = (__pyx_temp != 0);
  }

  if (__pyx_t_13) {
/* … */
  }
+08818:         listed = ', '.join(repr(name) for name in names[:5])
static PyObject *__pyx_pf_7questdb_7_client_36_schema_overrides_need_arrow_message_genexpr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
  struct __pyx_obj_7questdb_7_client___pyx_scope_struct_10_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_10_genexpr *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_10_genexpr(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_10_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_10_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 8818, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_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_36_schema_overrides_need_arrow_message_2generator7, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[7]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_schema_overrides_need_arrow_mes, __pyx_mstate_global->__pyx_n_u_questdb__client); if (unlikely(!gen)) __PYX_ERR(0, 8818, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client._schema_overrides_need_arrow_message.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_36_schema_overrides_need_arrow_message_2generator7(__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(0, 8818, __pyx_L1_error)
  __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 8818, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 8818, __pyx_L1_error) }
  __pyx_t_1 = __pyx_cur_scope->__pyx_genexpr_arg_0; __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = 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(0, 8818, __pyx_L1_error)
      #endif
      if (__pyx_t_2 >= __pyx_temp) break;
    }
    __pyx_t_3 = __Pyx_PyList_GetItemRefFast(__pyx_t_1, __pyx_t_2, __Pyx_ReferenceSharing_OwnStrongReference);
    ++__pyx_t_2;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8818, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_name);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_name, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_3 = PyObject_Repr(__pyx_cur_scope->__pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8818, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (unlikely(__Pyx_ListComp_Append(__pyx_r, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 8818, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  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_10 = __Pyx_PyList_GetSlice(__pyx_v_names, 0, 5); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8818, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_6 = __pyx_pf_7questdb_7_client_36_schema_overrides_need_arrow_message_genexpr(NULL, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8818, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_10 = __Pyx_Generator_GetInlinedResult(__pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8818, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__27, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8818, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF_SET(__pyx_v_listed, ((PyObject*)__pyx_t_6));
    __pyx_t_6 = 0;
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_10_genexpr {
  PyObject_HEAD
  PyObject *__pyx_genexpr_arg_0;
  PyObject *__pyx_v_name;
};

+08819:         if len(names) > 5:
    __pyx_t_8 = __Pyx_PyList_GET_SIZE(__pyx_v_names); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 8819, __pyx_L1_error)
    __pyx_t_13 = (__pyx_t_8 > 5);
    if (__pyx_t_13) {
/* … */
    }
+08820:             listed += f' and {len(names) - 5} more'
      __pyx_t_8 = __Pyx_PyList_GET_SIZE(__pyx_v_names); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 8820, __pyx_L1_error)
      __pyx_t_6 = __Pyx_PyUnicode_From_Py_ssize_t((__pyx_t_8 - 5), 0, ' ', 'd'); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8820, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_14[0] = __pyx_mstate_global->__pyx_kp_u_and;
      __pyx_t_14[1] = __pyx_t_6;
      __pyx_t_14[2] = __pyx_mstate_global->__pyx_kp_u_more;
      __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_14, 3, 5 * 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6), 127);
      if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8820, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlaceSafe(__pyx_v_listed, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8820, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF_SET(__pyx_v_listed, ((PyObject*)__pyx_t_6));
      __pyx_t_6 = 0;
+08821:         listed = f'In this DataFrame, these columns do not: {listed}. '
    __pyx_t_6 = __Pyx_PyUnicode_Unicode(__pyx_v_listed); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8821, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_14[0] = __pyx_mstate_global->__pyx_kp_u_In_this_DataFrame_these_columns;
    __pyx_t_14[1] = __pyx_t_6;
    __pyx_t_14[2] = __pyx_mstate_global->__pyx_kp_u__35;
    __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_14, 3, 41 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6) + 2, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6));
    if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8821, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF_SET(__pyx_v_listed, ((PyObject*)__pyx_t_10));
    __pyx_t_10 = 0;
+08822:     return (
  __Pyx_XDECREF(__pyx_r);
 08823:         '`schema_overrides` works only on input in Arrow format: a '
 08824:         'pyarrow Table or RecordBatch, a polars DataFrame, or a pandas '
 08825:         'DataFrame (pandas 2.2 or newer) whose columns all have Arrow '
+08826:         'dtypes (`pd.ArrowDtype`). ' + listed +
  __pyx_t_10 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_schema_overrides_works_only_on, __pyx_v_listed); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8826, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_6 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_10, __pyx_mstate_global->__pyx_kp_u_Convert_the_DataFrame_e_g_df_df); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8826, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_r = ((PyObject*)__pyx_t_6);
  __pyx_t_6 = 0;
  goto __pyx_L0;
 08827:         'Convert the DataFrame, e.g. '
 08828:         '`df = df.convert_dtypes(dtype_backend="pyarrow")`, or drop '
 08829:         '`schema_overrides`.')
 08830: 
 08831: 
+08832: cdef bint _pandas_dataframe_is_timestamp_only_at(
static int __pyx_f_7questdb_7_client__pandas_dataframe_is_timestamp_only_at(PyObject *__pyx_v_df, PyObject *__pyx_v_at) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("questdb._client._pandas_dataframe_is_timestamp_only_at", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08833:         object df,
 08834:         object at) except -1:
+08835:     if not _is_pandas_dataframe_object(df) or not isinstance(at, str):
  __pyx_t_2 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_df); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8835, __pyx_L1_error)
  __pyx_t_3 = (!__pyx_t_2);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = PyUnicode_Check(__pyx_v_at); 
  __pyx_t_2 = (!__pyx_t_3);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+08836:         return False
    __pyx_r = 0;
    goto __pyx_L0;
+08837:     try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L6_error:;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
    __pyx_L8_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_L1_error;
    __pyx_L10_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_L0;
    __pyx_L9_except_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_L0;
  }
+08838:         return len(df.columns) == 1 and df.columns[0] == at
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8838, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = PyObject_Length(__pyx_t_7); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 8838, __pyx_L6_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_2 = (__pyx_t_8 == 1);
      if (__pyx_t_2) {
      } else {
        __pyx_t_1 = __pyx_t_2;
        goto __pyx_L12_bool_binop_done;
      }
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_columns); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8838, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_7, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8838, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = PyObject_RichCompare(__pyx_t_9, __pyx_v_at, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8838, __pyx_L6_error)
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8838, __pyx_L6_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_1 = __pyx_t_2;
      __pyx_L12_bool_binop_done:;
      __pyx_r = __pyx_t_1;
      goto __pyx_L10_try_return;
+08839:     except Exception:
    __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_10) {
      __Pyx_ErrRestore(0,0,0);
+08840:         return False
      __pyx_r = 0;
      goto __pyx_L9_except_return;
    }
    goto __pyx_L8_except_error;
 08841: 
 08842: 
+08843: cdef Py_ssize_t _capsule_row_count(object sliceable) except -2:
static Py_ssize_t __pyx_f_7questdb_7_client__capsule_row_count(PyObject *__pyx_v_sliceable) {
  PyObject *__pyx_v_row_count_obj = 0;
  Py_ssize_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client._capsule_row_count", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -2L;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_row_count_obj);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+08844:     cdef object row_count_obj = getattr(sliceable, 'num_rows', None)
  __pyx_t_1 = __Pyx_GetAttr3(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_num_rows, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8844, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_row_count_obj = __pyx_t_1;
  __pyx_t_1 = 0;
+08845:     if row_count_obj is None:
  __pyx_t_2 = (__pyx_v_row_count_obj == Py_None);
  if (__pyx_t_2) {
/* … */
  }
+08846:         row_count_obj = getattr(sliceable, 'height', None)
    __pyx_t_1 = __Pyx_GetAttr3(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_height, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8846, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_row_count_obj, __pyx_t_1);
    __pyx_t_1 = 0;
+08847:     if row_count_obj is not None:
  __pyx_t_2 = (__pyx_v_row_count_obj != Py_None);
  if (__pyx_t_2) {
/* … */
  }
+08848:         return <Py_ssize_t>row_count_obj
    __pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__pyx_v_row_count_obj); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 8848, __pyx_L1_error)
    __pyx_r = ((Py_ssize_t)__pyx_t_3);
    goto __pyx_L0;
+08849:     if _is_pandas_dataframe_object(sliceable):
  __pyx_t_2 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_sliceable); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8849, __pyx_L1_error)
  if (__pyx_t_2) {
/* … */
  }
+08850:         return <Py_ssize_t>len(sliceable)
    __pyx_t_3 = PyObject_Length(__pyx_v_sliceable); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(0, 8850, __pyx_L1_error)
    __pyx_r = ((Py_ssize_t)__pyx_t_3);
    goto __pyx_L0;
+08851:     return -1
  __pyx_r = -1L;
  goto __pyx_L0;
 08852: 
 08853: 
+08854: cdef object _capsule_slice_rows(
static PyObject *__pyx_f_7questdb_7_client__capsule_slice_rows(PyObject *__pyx_v_sliceable, Py_ssize_t __pyx_v_offset, Py_ssize_t __pyx_v_row_count) {
  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_AddTraceback("questdb._client._capsule_slice_rows", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08855:         object sliceable,
 08856:         Py_ssize_t offset,
 08857:         Py_ssize_t row_count):
+08858:     if hasattr(sliceable, 'slice'):
  __pyx_t_1 = __Pyx_HasAttr(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_slice); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 8858, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+08859:         return sliceable.slice(offset, row_count)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __pyx_v_sliceable;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = PyLong_FromSsize_t(__pyx_v_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8859, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = PyLong_FromSsize_t(__pyx_v_row_count); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8859, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_4, __pyx_t_5};
      __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_slice, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (1*__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;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8859, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+08860:     if _is_pandas_dataframe_object(sliceable):
  __pyx_t_1 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_sliceable); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8860, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+08861:         return sliceable.iloc[offset:offset + row_count]
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_iloc); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8861, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = __Pyx_PyObject_GetSlice(__pyx_t_2, __pyx_v_offset, (__pyx_v_offset + __pyx_v_row_count), NULL, NULL, NULL, 1, 1, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8861, __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;
+08862:     return None
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
 08863: 
 08864: 
+08865: cdef struct direct_conn_source_t:
struct __pyx_t_7questdb_7_client_direct_conn_source_t {
  struct questdb_db *db;
  struct line_sender_opts const *opts;
  int slice_for_oidc;
  int connect_gave_up;
};
 08866:     # Pooled borrow when ``db != NULL``; otherwise a poolless standalone
 08867:     # connection opened from ``opts`` per call.
 08868:     questdb_db* db
 08869:     const line_sender_opts* opts
 08870:     # An OIDC provider is attached: split a retried connect into slices so the
 08871:     # foreground terminal-OIDC gate sees each outcome (see
 08872:     # `_direct_conn_open_checked`).
 08873:     bint slice_for_oidc
 08874:     # Set by `_direct_conn_open_checked` when a pooled borrow that was given a
 08875:     # retry budget fails. Native has then spent that budget, or stopped early
 08876:     # on a failure it does not retry for a caller that waits, so
 08877:     # `_direct_dataframe_run` must not borrow again.
 08878:     bint connect_gave_up
 08879: 
 08880: 
+08881: cdef qwp_direct_sender* _direct_conn_open(
static struct qwp_direct_sender *__pyx_f_7questdb_7_client__direct_conn_open(struct __pyx_t_7questdb_7_client_direct_conn_source_t *__pyx_v_src, uint64_t __pyx_v_budget_ms, struct line_sender_error **__pyx_v_err) {
  struct qwp_direct_sender *__pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 08882:         direct_conn_source_t* src,
 08883:         uint64_t budget_ms,
 08884:         line_sender_error** err) noexcept nogil:
+08885:     if src.db != NULL:
  __pyx_t_1 = (__pyx_v_src->db != NULL);
  if (__pyx_t_1) {
/* … */
  }
+08886:         if budget_ms == 0:
    __pyx_t_1 = (__pyx_v_budget_ms == 0);
    if (__pyx_t_1) {
/* … */
    }
+08887:             return questdb_db_borrow_direct_sender(src.db, err)
      __pyx_r = questdb_db_borrow_direct_sender(__pyx_v_src->db, __pyx_v_err);
      goto __pyx_L0;
+08888:         return questdb_db_borrow_direct_sender_with_retry(
    __pyx_r = questdb_db_borrow_direct_sender_with_retry(__pyx_v_src->db, __pyx_v_budget_ms, __pyx_v_err);
    goto __pyx_L0;
 08889:             src.db, budget_ms, err)
+08890:     return qwp_direct_sender_from_opts(src.opts, err)
  __pyx_r = qwp_direct_sender_from_opts(__pyx_v_src->opts, __pyx_v_err);
  goto __pyx_L0;
 08891: 
 08892: 
+08893: cdef qwp_direct_sender* _direct_conn_open_checked(
static struct qwp_direct_sender *__pyx_f_7questdb_7_client__direct_conn_open_checked(struct __pyx_t_7questdb_7_client_direct_conn_source_t *__pyx_v_src, uint64_t __pyx_v_budget_ms) {
  struct line_sender_error *__pyx_v_err;
  struct qwp_direct_sender *__pyx_v_conn;
  PyThreadState *__pyx_v_gs;
  uint64_t __pyx_v_slice_ms;
  double __pyx_v_deadline;
  double __pyx_v_slice_start;
  double __pyx_v_now;
  double __pyx_v_remaining;
  uint64_t __pyx_v_remaining_ms;
  int __pyx_v_last_slice;
  int __pyx_v_role_reject;
  PyObject *__pyx_v_exc = 0;
  struct qwp_direct_sender *__pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("questdb._client._direct_conn_open_checked", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 08894:         direct_conn_source_t* src,
 08895:         uint64_t budget_ms) except NULL:
 08896:     """Open (or borrow) the attempt's connection, raising on failure.
 08897: 
 08898:     With an OIDC provider attached the native ``*_with_retry`` borrow is run
 08899:     in slices. The native side classifies a non-busy ``InteractionRequired``
 08900:     as a retryable ``SocketError`` -- right for background drainers, which
 08901:     keep queued frames alive while someone signs in -- so one call spanning
 08902:     the whole budget would poll the provider for up to 300s before the
 08903:     foreground gate ever saw the error it exists to fail fast on.
 08904: 
 08905:     Between slices that terminal OIDC case ends the wait early, and so does
 08906:     any error its reconnect loop treats as terminal (``AuthError`` from a
 08907:     401/403 upgrade, ``ProtocolVersionError``, ...): recognised by its code,
 08908:     or by the native call returning *before* its slice ran out. The code
 08909:     check matters because native's last pick runs at the slice deadline, so
 08910:     a terminal error from it arrives on time. A 421 with a role header is
 08911:     ``RoleMismatch``; when durable ACK is required and every endpoint rejects
 08912:     by role, native synthesizes ``ProtocolVersionError`` with a role-rejection
 08913:     marker. That marker exempts it from the terminal gate: unlike terminal
 08914:     errors, role rejections are retried until the slice deadline. Re-dialling
 08915:     a terminal error would re-present a rejected credential and repeat
 08916:     terminal connection events. Every other failure keeps retrying
 08917:     until the caller's budget is spent, exactly as the single native call
 08918:     does without a provider: a primary election
 08919:     (``RoleMismatch``) or pool contention (``InvalidApiCall`` "pool
 08920:     exhausted") that outlasts one slice must not fail an OIDC-authenticated
 08921:     call that the same call without a provider rides out. The slicing lives
 08922:     here, inside one attempt, so the frame is prepared once per attempt rather
 08923:     than once per slice, and slices double so a long outage restarts the
 08924:     native reconnect backoff only a logarithmic number of times.
 08925:     """
+08926:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+08927:     cdef qwp_direct_sender* conn = NULL
  __pyx_v_conn = NULL;
+08928:     cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+08929:     cdef uint64_t slice_ms = budget_ms
  __pyx_v_slice_ms = __pyx_v_budget_ms;
+08930:     cdef double deadline = 0.0
  __pyx_v_deadline = 0.0;
+08931:     cdef double slice_start = 0.0
  __pyx_v_slice_start = 0.0;
+08932:     cdef double now = 0.0
  __pyx_v_now = 0.0;
+08933:     cdef double remaining = 0.0
  __pyx_v_remaining = 0.0;
+08934:     cdef uint64_t remaining_ms = 0
  __pyx_v_remaining_ms = 0;
+08935:     cdef bint last_slice = True
  __pyx_v_last_slice = 1;
+08936:     cdef bint role_reject = False
  __pyx_v_role_reject = 0;
 08937:     cdef object exc
+08938:     if src.slice_for_oidc and budget_ms > _OIDC_FOREGROUND_RETRY_SLICE_MS:
  if (__pyx_v_src->slice_for_oidc) {
  } else {
    __pyx_t_1 = __pyx_v_src->slice_for_oidc;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_budget_ms > __pyx_v_7questdb_7_client__OIDC_FOREGROUND_RETRY_SLICE_MS);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+08939:         slice_ms = _OIDC_FOREGROUND_RETRY_SLICE_MS
    __pyx_v_slice_ms = __pyx_v_7questdb_7_client__OIDC_FOREGROUND_RETRY_SLICE_MS;
+08940:         last_slice = False
    __pyx_v_last_slice = 0;
+08941:         deadline = time.monotonic() + budget_ms / 1000.0
    __pyx_t_4 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8941, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8941, __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_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[2] = {__pyx_t_4, NULL};
      __pyx_t_3 = __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_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8941, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __pyx_t_6 = PyFloat_FromDouble((((double)__pyx_v_budget_ms) / 1000.0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8941, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_4 = PyNumber_Add(__pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8941, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_8 = __Pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 8941, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_deadline = __pyx_t_8;
+08942:     while True:
  while (1) {
+08943:         if not last_slice:
    __pyx_t_1 = (!__pyx_v_last_slice);
    if (__pyx_t_1) {
/* … */
    }
+08944:             slice_start = time.monotonic()
      __pyx_t_6 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8944, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8944, __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_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[2] = {__pyx_t_6, NULL};
        __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (__pyx_t_7*__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_4)) __PYX_ERR(0, 8944, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      __pyx_t_8 = __Pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 8944, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_v_slice_start = __pyx_t_8;
+08945:         _ensure_doesnt_have_gil(&gs)
    (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+08946:         conn = _direct_conn_open(src, slice_ms, &err)
    __pyx_v_conn = __pyx_f_7questdb_7_client__direct_conn_open(__pyx_v_src, __pyx_v_slice_ms, (&__pyx_v_err));
+08947:         _ensure_has_gil(&gs)
    __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+08948:         if conn != NULL:
    __pyx_t_1 = (__pyx_v_conn != NULL);
    if (__pyx_t_1) {
/* … */
    }
+08949:             src.connect_gave_up = False
      __pyx_v_src->connect_gave_up = 0;
+08950:             return conn
      __pyx_r = __pyx_v_conn;
      goto __pyx_L0;
 08951:         # A durable-ACK failure after *every* endpoint rejected by role has
 08952:         # ProtocolVersionError code but is retryable, unlike a genuinely
 08953:         # unsupported protocol. Capture its native role-rejection marker
 08954:         # before freeing the error.
+08955:         role_reject = questdb_error_is_qwp_ws_role_reject(err)
    __pyx_v_role_reject = questdb_error_is_qwp_ws_role_reject(__pyx_v_err);
+08956:         exc = c_err_to_py(err)
    __pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8956, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_XDECREF_SET(__pyx_v_exc, __pyx_t_4);
    __pyx_t_4 = 0;
+08957:         err = NULL
    __pyx_v_err = NULL;
 08958:         # Read by the caller if this raises below; a later slice that
 08959:         # connects clears it.
+08960:         src.connect_gave_up = src.db != NULL and budget_ms > 0
    __pyx_t_2 = (__pyx_v_src->db != NULL);
    if (__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L10_bool_binop_done;
    }
    __pyx_t_2 = (__pyx_v_budget_ms > 0);
    __pyx_t_1 = __pyx_t_2;
    __pyx_L10_bool_binop_done:;
    __pyx_v_src->connect_gave_up = __pyx_t_1;
+08961:         if last_slice or _is_oidc_terminal_for_foreground(exc):
    if (!__pyx_v_last_slice) {
    } else {
      __pyx_t_1 = __pyx_v_last_slice;
      goto __pyx_L13_bool_binop_done;
    }
    __pyx_t_2 = __pyx_f_7questdb_7_client__is_oidc_terminal_for_foreground(__pyx_v_exc); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 8961, __pyx_L1_error)
    __pyx_t_1 = __pyx_t_2;
    __pyx_L13_bool_binop_done:;
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+08962:             raise exc
      __Pyx_Raise(__pyx_v_exc, 0, 0, 0);
      __PYX_ERR(0, 8962, __pyx_L1_error)
 08963:         # Native makes one more pick after sleeping to its slice deadline, so
 08964:         # a terminal error from that pick comes back AT the deadline and the
 08965:         # timing test below cannot tell it from a retryable one. Re-dialling
 08966:         # it re-presented the rejected credential and fired a second terminal
 08967:         # `AuthFailed` event.
+08968:         if exc.code in _NATIVE_RECONNECT_TERMINAL_CODES and not role_reject:
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8968, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_NATIVE_RECONNECT_TERMINAL_CODES); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8968, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_4, __pyx_t_5, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 8968, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L16_bool_binop_done;
    }
    __pyx_t_2 = (!__pyx_v_role_reject);
    __pyx_t_1 = __pyx_t_2;
    __pyx_L16_bool_binop_done:;
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+08969:             raise exc
      __Pyx_Raise(__pyx_v_exc, 0, 0, 0);
      __PYX_ERR(0, 8969, __pyx_L1_error)
+08970:         now = time.monotonic()
    __pyx_t_4 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8970, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8970, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __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_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_7 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
      __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __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;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8970, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __pyx_t_8 = __Pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 8970, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_v_now = __pyx_t_8;
 08971:         # Native started its slice deadline after `slice_start`, and returns
 08972:         # a retryable error only once that deadline has passed. Returning
 08973:         # earlier means native gave up on a terminal error whose code the
 08974:         # check above may not know. The role-rejection exemption is defensive
 08975:         # if native ever gains an early-return path for one. The margin
 08976:         # absorbs a coarse monotonic clock.
+08977:         if not role_reject and now < slice_start + (
    __pyx_t_2 = (!__pyx_v_role_reject);
    if (__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L19_bool_binop_done;
    }
/* … */
    __pyx_t_2 = (__pyx_v_now < (__pyx_v_slice_start + (((double)(__pyx_v_slice_ms - __pyx_v_7questdb_7_client__OIDC_FOREGROUND_SLICE_EARLY_MARGIN_MS)) / 1000.0)));
    __pyx_t_1 = __pyx_t_2;
    __pyx_L19_bool_binop_done:;
/* … */
    if (unlikely(__pyx_t_1)) {
/* … */
    }
 08978:                 slice_ms - _OIDC_FOREGROUND_SLICE_EARLY_MARGIN_MS) / 1000.0:
+08979:             raise exc
      __Pyx_Raise(__pyx_v_exc, 0, 0, 0);
      __PYX_ERR(0, 8979, __pyx_L1_error)
+08980:         remaining = deadline - now
    __pyx_v_remaining = (__pyx_v_deadline - __pyx_v_now);
+08981:         if remaining <= 0.0:
    __pyx_t_1 = (__pyx_v_remaining <= 0.0);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+08982:             raise exc
      __Pyx_Raise(__pyx_v_exc, 0, 0, 0);
      __PYX_ERR(0, 8982, __pyx_L1_error)
+08983:         remaining_ms = <uint64_t>(remaining * 1000.0)
    __pyx_v_remaining_ms = ((uint64_t)(__pyx_v_remaining * 1000.0));
+08984:         if remaining_ms == 0:
    __pyx_t_1 = (__pyx_v_remaining_ms == 0);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+08985:             raise exc
      __Pyx_Raise(__pyx_v_exc, 0, 0, 0);
      __PYX_ERR(0, 8985, __pyx_L1_error)
+08986:         slice_ms = slice_ms * 2
    __pyx_v_slice_ms = (__pyx_v_slice_ms * 2);
+08987:         if slice_ms >= remaining_ms:
    __pyx_t_1 = (__pyx_v_slice_ms >= __pyx_v_remaining_ms);
    if (__pyx_t_1) {
/* … */
    }
  }
 08988:             # The final slice spans the rest of the budget, so its error is
 08989:             # the one a single native call would have returned.
+08990:             slice_ms = remaining_ms
      __pyx_v_slice_ms = __pyx_v_remaining_ms;
+08991:             last_slice = True
      __pyx_v_last_slice = 1;
 08992: 
 08993: 
+08994: cdef void _direct_conn_close(
static void __pyx_f_7questdb_7_client__direct_conn_close(struct __pyx_t_7questdb_7_client_direct_conn_source_t *__pyx_v_src, struct qwp_direct_sender *__pyx_v_conn, int __pyx_v_force_drop) {
/* … */
  /* function exit code */
}
 08995:         direct_conn_source_t* src,
 08996:         qwp_direct_sender* conn,
 08997:         bint force_drop) noexcept nogil:
+08998:     if src.db != NULL:
  __pyx_t_1 = (__pyx_v_src->db != NULL);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+08999:         if force_drop:
    if (__pyx_v_force_drop) {
/* … */
      goto __pyx_L4;
    }
+09000:             questdb_db_drop_direct_sender(src.db, conn)
      questdb_db_drop_direct_sender(__pyx_v_src->db, __pyx_v_conn);
 09001:         else:
+09002:             questdb_db_return_direct_sender(src.db, conn)
    /*else*/ {
      questdb_db_return_direct_sender(__pyx_v_src->db, __pyx_v_conn);
    }
    __pyx_L4:;
+09003:     elif force_drop:
  if (__pyx_v_force_drop) {
/* … */
    goto __pyx_L3;
  }
 09004:         # Destroying a poolless sender after a failure must discard its
 09005:         # uncommitted pipelined frames, and `qwp_direct_sender_free`
 09006:         # commits them best-effort, so the drop entry point is the only
 09007:         # bound way to get that. It ignores its `db` argument
 09008:         # (`qwp_sender.h`: "`db` is currently ignored - the sender
 09009:         # carries its own reference to the pool"), which is what makes
 09010:         # NULL safe for a handle that never came from a pool.
+09011:         questdb_db_drop_direct_sender(NULL, conn)
    questdb_db_drop_direct_sender(NULL, __pyx_v_conn);
 09012:     else:
+09013:         qwp_direct_sender_free(conn)
  /*else*/ {
    qwp_direct_sender_free(__pyx_v_conn);
  }
  __pyx_L3:;
 09014: 
 09015: 
+09016: cdef bint _dataframe_client_try_capsule_path(
static int __pyx_f_7questdb_7_client__dataframe_client_try_capsule_path(struct __pyx_t_7questdb_7_client_direct_conn_source_t *__pyx_v_src, uint64_t __pyx_v_budget_ms, PyObject *__pyx_v_df, PyObject *__pyx_v_table_name, PyObject *__pyx_v_symbols, PyObject *__pyx_v_at, size_t __pyx_v_max_rows_per_batch, PyObject *__pyx_v_validated_overrides, int *__pyx_v_may_have_committed_prefix, int *__pyx_v_nonreplayable_consumed) {
  struct qdb_pystr_buf *__pyx_v_b;
  struct qwp_direct_sender *__pyx_v_conn;
  CYTHON_UNUSED struct line_sender_error *__pyx_v_err;
  PyThreadState *__pyx_v_gs;
  PyObject *__pyx_v_sliceable = 0;
  int __pyx_v_any_flushed;
  size_t __pyx_v_deferred_since_sync;
  int __pyx_v_force_drop_conn;
  PyObject *__pyx_v_row_slice = 0;
  PyObject *__pyx_v_first_batch = 0;
  PyObject *__pyx_v_schema = 0;
  Py_ssize_t __pyx_v_total_rows;
  Py_ssize_t __pyx_v_offset;
  Py_ssize_t __pyx_v_chunk_rows;
  PyObject *__pyx_v_symbol_overrides = 0;
  PyObject *__pyx_v_merged_overrides = 0;
  int __pyx_v_can_slice;
  struct line_sender_table_name __pyx_v_c_table_name;
  struct line_sender_column_name __pyx_v_c_ts_column;
  struct line_sender_column_name *__pyx_v_c_ts_column_ptr;
  struct ArrowSchema __pyx_v_c_schema;
  struct qwp_arrow_override *__pyx_v_c_overrides;
  size_t __pyx_v_c_overrides_len;
  int __pyx_v_at_is_column;
  int __pyx_v_at_scalar_set;
  int64_t __pyx_v_at_scalar_nanos;
  size_t __pyx_v_i;
  PyObject *__pyx_v_name_bytes = 0;
  PyObject *__pyx_v_roundtrip_overrides = 0;
  int __pyx_v_kind_int;
  int __pyx_v_arg_int;
  PyObject *__pyx_v_pandas_dtypes = 0;
  PyObject *__pyx_v_export_dtypes = 0;
  PyObject *__pyx_v_binary_names = 0;
  PyObject *__pyx_v_unlabelled = 0;
  PyObject *__pyx_v_entry = 0;
  PyObject *__pyx_9genexpr25__pyx_v_entry = NULL;
  int __pyx_r;
  __Pyx_INCREF(__pyx_v_at);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_AddTraceback("questdb._client._dataframe_client_try_capsule_path", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_sliceable);
  __Pyx_XDECREF(__pyx_v_row_slice);
  __Pyx_XDECREF(__pyx_v_first_batch);
  __Pyx_XDECREF(__pyx_v_schema);
  __Pyx_XDECREF(__pyx_v_symbol_overrides);
  __Pyx_XDECREF(__pyx_v_merged_overrides);
  __Pyx_XDECREF(__pyx_v_name_bytes);
  __Pyx_XDECREF(__pyx_v_roundtrip_overrides);
  __Pyx_XDECREF(__pyx_v_pandas_dtypes);
  __Pyx_XDECREF(__pyx_v_export_dtypes);
  __Pyx_XDECREF(__pyx_v_binary_names);
  __Pyx_XDECREF(__pyx_v_unlabelled);
  __Pyx_XDECREF(__pyx_v_entry);
  __Pyx_XDECREF(__pyx_9genexpr25__pyx_v_entry);
  __Pyx_XDECREF(__pyx_v_at);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 09017:         direct_conn_source_t* src,
 09018:         uint64_t budget_ms,
 09019:         object df,
 09020:         object table_name,
 09021:         object symbols,
 09022:         object at,
 09023:         size_t max_rows_per_batch,
 09024:         object validated_overrides,
 09025:         bint* may_have_committed_prefix,
 09026:         bint* nonreplayable_consumed) except -1:
+09027:     cdef qdb_pystr_buf* b = NULL
  __pyx_v_b = NULL;
+09028:     cdef qwp_direct_sender* conn = NULL
  __pyx_v_conn = NULL;
+09029:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+09030:     cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+09031:     cdef object sliceable = None
  __Pyx_INCREF(Py_None);
  __pyx_v_sliceable = Py_None;
+09032:     cdef bint any_flushed = False
  __pyx_v_any_flushed = 0;
+09033:     cdef size_t deferred_since_sync = 0
  __pyx_v_deferred_since_sync = 0;
+09034:     cdef bint force_drop_conn = False
  __pyx_v_force_drop_conn = 0;
+09035:     cdef object row_slice = None
  __Pyx_INCREF(Py_None);
  __pyx_v_row_slice = Py_None;
+09036:     cdef object first_batch = None
  __Pyx_INCREF(Py_None);
  __pyx_v_first_batch = Py_None;
 09037:     cdef object schema
+09038:     cdef Py_ssize_t total_rows = 0
  __pyx_v_total_rows = 0;
+09039:     cdef Py_ssize_t offset = 0
  __pyx_v_offset = 0;
 09040:     cdef Py_ssize_t chunk_rows
 09041:     cdef object symbol_overrides
 09042:     cdef object merged_overrides
+09043:     cdef bint can_slice = False
  __pyx_v_can_slice = 0;
 09044:     cdef line_sender_table_name c_table_name
 09045:     cdef line_sender_column_name c_ts_column
+09046:     cdef line_sender_column_name* c_ts_column_ptr = NULL
  __pyx_v_c_ts_column_ptr = NULL;
 09047:     cdef ArrowSchema c_schema
+09048:     cdef qwp_arrow_override* c_overrides = NULL
  __pyx_v_c_overrides = NULL;
+09049:     cdef size_t c_overrides_len = 0
  __pyx_v_c_overrides_len = 0;
+09050:     cdef bint at_is_column = False
  __pyx_v_at_is_column = 0;
+09051:     cdef bint at_scalar_set = False
  __pyx_v_at_scalar_set = 0;
+09052:     cdef int64_t at_scalar_nanos = 0
  __pyx_v_at_scalar_nanos = 0;
 09053:     cdef size_t i
 09054:     cdef object name_bytes
 09055:     cdef object roundtrip_overrides
 09056:     cdef int kind_int
 09057:     cdef int arg_int
+09058:     cdef object pandas_dtypes = None
  __Pyx_INCREF(Py_None);
  __pyx_v_pandas_dtypes = Py_None;
 09059:     cdef object export_dtypes
+09060:     cdef set binary_names = set()
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9060, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_binary_names = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+09061:     cdef list unlabelled = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9061, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_unlabelled = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 09062:     cdef object entry
 09063: 
+09064:     if _is_pandas_dataframe_object(df):
  __pyx_t_2 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_df); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 9064, __pyx_L1_error)
  if (__pyx_t_2) {
/* … */
  }
 09065:         # Read once and shared by every per-column pass below: each
 09066:         # `df.dtypes` builds a fresh Series.
+09067:         _dataframe_may_import_deps()
    __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_may_import_deps(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9067, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+09068:         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_L9_try_end;
      __pyx_L4_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
      __pyx_L6_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_L7_except_return:;
      __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_L0;
      __pyx_L9_try_end:;
    }
+09069:             pandas_dtypes = df.dtypes
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_dtypes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9069, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF_SET(__pyx_v_pandas_dtypes, __pyx_t_1);
        __pyx_t_1 = 0;
+09070:         except Exception:
      __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
      if (__pyx_t_6) {
        __Pyx_ErrRestore(0,0,0);
+09071:             return False
        __pyx_r = 0;
        goto __pyx_L7_except_return;
      }
      goto __pyx_L6_except_error;
+09072:         if _pandas_dtypes_require_manual_planner(pandas_dtypes):
    __pyx_t_2 = __pyx_f_7questdb_7_client__pandas_dtypes_require_manual_planner(__pyx_v_pandas_dtypes); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 9072, __pyx_L1_error)
    if (__pyx_t_2) {
/* … */
    }
+09073:             return False
      __pyx_r = 0;
      goto __pyx_L0;
+09074:     if _pandas_dataframe_is_timestamp_only_at(df, at):
  __pyx_t_2 = __pyx_f_7questdb_7_client__pandas_dataframe_is_timestamp_only_at(__pyx_v_df, __pyx_v_at); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 9074, __pyx_L1_error)
  if (__pyx_t_2) {
/* … */
  }
+09075:         return False
    __pyx_r = 0;
    goto __pyx_L0;
 09076: 
 09077:     # LazyFrame: use the streaming engine (polars 1.32+) for lower peak
 09078:     # memory. `LazyFrame.collect_batches()` would stream natively but
 09079:     # upstream marks it unstable and "much slower than native sinks", so
 09080:     # we materialize and slice downstream.
+09081:     if _is_polars_dataframe_or_lazy(df) and isinstance(
  __pyx_t_7 = __pyx_f_7questdb_7_client__is_polars_dataframe_or_lazy(__pyx_v_df); if (unlikely(__pyx_t_7 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 9081, __pyx_L1_error)
  if (__pyx_t_7) {
  } else {
    __pyx_t_2 = __pyx_t_7;
    goto __pyx_L15_bool_binop_done;
  }
/* … */
  __pyx_t_7 = PyObject_IsInstance(__pyx_v_df, __pyx_t_1); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 9081, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_2 = __pyx_t_7;
  __pyx_L15_bool_binop_done:;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L14;
  }
+09082:             df, _POLARS_LAZYFRAME_T):
  __pyx_t_1 = __pyx_v_7questdb_7_client__POLARS_LAZYFRAME_T;
  __Pyx_INCREF(__pyx_t_1);
+09083:         sliceable = df.collect(engine='streaming')
    __pyx_t_8 = __pyx_v_df;
    __Pyx_INCREF(__pyx_t_8);
    __pyx_t_9 = 0;
    {
      PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_8, NULL};
      __pyx_t_10 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 9083, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_engine, __pyx_mstate_global->__pyx_n_u_streaming, __pyx_t_10, __pyx_callargs+1, 0) < (0)) __PYX_ERR(0, 9083, __pyx_L1_error)
      __pyx_t_1 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_collect, __pyx_callargs+__pyx_t_9, (1-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_10);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9083, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_DECREF_SET(__pyx_v_sliceable, __pyx_t_1);
    __pyx_t_1 = 0;
+09084:     elif hasattr(df, '__arrow_c_stream__'):
  __pyx_t_2 = __Pyx_HasAttr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_arrow_c_stream_2); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 9084, __pyx_L1_error)
  if (__pyx_t_2) {
/* … */
    goto __pyx_L14;
  }
+09085:         sliceable = df
    __Pyx_INCREF(__pyx_v_df);
    __Pyx_DECREF_SET(__pyx_v_sliceable, __pyx_v_df);
+09086:     elif hasattr(df, '__arrow_c_array__'):
  __pyx_t_2 = __Pyx_HasAttr(__pyx_v_df, __pyx_mstate_global->__pyx_n_u_arrow_c_array); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 9086, __pyx_L1_error)
  if (__pyx_t_2) {
/* … */
    goto __pyx_L14;
  }
+09087:         _dataframe_require_pyarrow()
    __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_require_pyarrow(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9087, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+09088:         sliceable = _PYARROW.Table.from_batches(
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_Table); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9088, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_10 = __pyx_t_8;
    __Pyx_INCREF(__pyx_t_10);
+09089:             [_PYARROW.record_batch(df)])
    __pyx_t_12 = __pyx_v_7questdb_7_client__PYARROW;
    __Pyx_INCREF(__pyx_t_12);
    __pyx_t_9 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_v_df};
      __pyx_t_11 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_record_batch, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 9089, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
    }
    __pyx_t_12 = PyList_New(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 9089, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_GIVEREF(__pyx_t_11);
    if (__Pyx_PyList_SET_ITEM(__pyx_t_12, 0, __pyx_t_11) != (0)) __PYX_ERR(0, 9089, __pyx_L1_error);
    __pyx_t_11 = 0;
    __pyx_t_9 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_t_12};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_batches, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9088, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_DECREF_SET(__pyx_v_sliceable, __pyx_t_1);
    __pyx_t_1 = 0;
 09090:     else:
+09091:         return False
  /*else*/ {
    __pyx_r = 0;
    goto __pyx_L0;
  }
  __pyx_L14:;
 09092: 
+09093:     _reject_polars_object_columns(sliceable)
  __pyx_t_13 = __pyx_f_7questdb_7_client__reject_polars_object_columns(__pyx_v_sliceable); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9093, __pyx_L1_error)
 09094: 
+09095:     total_rows = _capsule_row_count(sliceable)
  __pyx_t_14 = __pyx_f_7questdb_7_client__capsule_row_count(__pyx_v_sliceable); if (unlikely(__pyx_t_14 == ((Py_ssize_t)-2L))) __PYX_ERR(0, 9095, __pyx_L1_error)
  __pyx_v_total_rows = __pyx_t_14;
 09096: 
+09097:     if not isinstance(table_name, str):
  __pyx_t_2 = PyUnicode_Check(__pyx_v_table_name); 
  __pyx_t_7 = (!__pyx_t_2);
  if (unlikely(__pyx_t_7)) {
/* … */
  }
+09098:         raise TypeError(
    __pyx_t_8 = NULL;
    __pyx_t_9 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_mstate_global->__pyx_kp_u_table_name_must_be_str_for_Arrow};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9098, __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(0, 9098, __pyx_L1_error)
 09099:             'table_name must be str for Arrow-native DataFrame input.')
+09100:     if at is None or isinstance(at, ServerTimestampType):
  __pyx_t_2 = (__pyx_v_at == Py_None);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_7 = __pyx_t_2;
    goto __pyx_L19_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ServerTimestampType); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_at, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 9100, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_7 = __pyx_t_2;
  __pyx_L19_bool_binop_done:;
  if (__pyx_t_7) {
/* … */
    goto __pyx_L18;
  }
+09101:         at_is_column = False
    __pyx_v_at_is_column = 0;
+09102:     elif isinstance(at, TimestampNanos):
  __pyx_t_7 = __Pyx_TypeCheck(__pyx_v_at, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos); 
  if (__pyx_t_7) {
/* … */
    goto __pyx_L18;
  }
+09103:         at_scalar_set = True
    __pyx_v_at_scalar_set = 1;
+09104:         at_scalar_nanos = (<TimestampNanos>at)._value
    __pyx_t_15 = ((struct __pyx_obj_7questdb_7_client_TimestampNanos *)__pyx_v_at)->_value;
    __pyx_v_at_scalar_nanos = __pyx_t_15;
+09105:     elif isinstance(at, datetime.datetime):
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9105, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9105, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_7 = PyObject_IsInstance(__pyx_v_at, __pyx_t_8); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 9105, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (__pyx_t_7) {
/* … */
    goto __pyx_L18;
  }
+09106:         at_scalar_set = True
    __pyx_v_at_scalar_set = 1;
+09107:         at_scalar_nanos = datetime_to_nanos(at)
    if (!(likely(((__pyx_v_at) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_at, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime))))) __PYX_ERR(0, 9107, __pyx_L1_error)
    __pyx_t_15 = __pyx_f_7questdb_7_client_datetime_to_nanos(((PyDateTime_DateTime *)__pyx_v_at)); if (unlikely(__pyx_t_15 == ((int64_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 9107, __pyx_L1_error)
    __pyx_v_at_scalar_nanos = __pyx_t_15;
+09108:     elif isinstance(at, str):
  __pyx_t_7 = PyUnicode_Check(__pyx_v_at); 
  if (__pyx_t_7) {
/* … */
    goto __pyx_L18;
  }
+09109:         at_is_column = True
    __pyx_v_at_is_column = 1;
+09110:     elif isinstance(at, int) and not isinstance(at, bool):
  __pyx_t_2 = PyLong_Check(__pyx_v_at); 
  if (__pyx_t_2) {
  } else {
    __pyx_t_7 = __pyx_t_2;
    goto __pyx_L21_bool_binop_done;
  }
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_at, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); 
  __pyx_t_16 = (!__pyx_t_2);
  __pyx_t_7 = __pyx_t_16;
  __pyx_L21_bool_binop_done:;
  if (likely(__pyx_t_7)) {
/* … */
    goto __pyx_L18;
  }
+09111:         at = _capsule_at_index_to_name(sliceable, at)
    __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_v_at); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 9111, __pyx_L1_error)
    __pyx_t_8 = __pyx_f_7questdb_7_client__capsule_at_index_to_name(__pyx_v_sliceable, __pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9111, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF_SET(__pyx_v_at, __pyx_t_8);
    __pyx_t_8 = 0;
+09112:         at_is_column = True
    __pyx_v_at_is_column = 1;
 09113:     else:
+09114:         raise TypeError(
  /*else*/ {
    __pyx_t_1 = NULL;
    __pyx_t_9 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_mstate_global->__pyx_kp_u_at_must_be_a_column_name_str_int};
      __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9114, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
    }
    __Pyx_Raise(__pyx_t_8, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __PYX_ERR(0, 9114, __pyx_L1_error)
  }
  __pyx_L18:;
 09115:             'at must be a column name str, int index, TimestampNanos, '
 09116:             'datetime, ServerTimestamp, or None for Arrow-native DataFrame '
 09117:             'input.')
 09118: 
 09119:     # An empty frame is a no-op: it emits nothing and is never exported,
 09120:     # so it skips the name check and symbol-shape validation.
+09121:     if total_rows == 0:
  __pyx_t_7 = (__pyx_v_total_rows == 0);
  if (__pyx_t_7) {
/* … */
  }
+09122:         return True
    __pyx_r = 1;
    goto __pyx_L0;
 09123: 
+09124:     _reject_nul_column_names(sliceable)
  __pyx_t_13 = __pyx_f_7questdb_7_client__reject_nul_column_names(__pyx_v_sliceable); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9124, __pyx_L1_error)
 09125: 
+09126:     if _is_pandas_dataframe_object(sliceable):
  __pyx_t_7 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_sliceable); if (unlikely(__pyx_t_7 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 9126, __pyx_L1_error)
  if (__pyx_t_7) {
/* … */
    goto __pyx_L24;
  }
+09127:         if _PYARROW is None:
    __pyx_t_7 = (__pyx_v_7questdb_7_client__PYARROW == Py_None);
    if (__pyx_t_7) {
/* … */
    }
+09128:             _dataframe_require_pyarrow()
      __pyx_t_8 = __pyx_f_7questdb_7_client__dataframe_require_pyarrow(); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9128, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+09129:         if not hasattr(_PYARROW.Table, '__arrow_c_stream__'):
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_Table); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9129, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_7 = __Pyx_HasAttr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_arrow_c_stream_2); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 9129, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_16 = (!__pyx_t_7);
    if (unlikely(__pyx_t_16)) {
/* … */
    }
+09130:             raise ImportError(
      __pyx_t_1 = NULL;
+09131:                 '`pyarrow` >= 14.0.0 is required for Arrow-backed pandas '
      __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_17, 3, 76 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10) + 54, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_10));
      if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 9131, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_9 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_12};
        __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ImportError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__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_8)) __PYX_ERR(0, 9130, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
      }
      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __PYX_ERR(0, 9130, __pyx_L1_error)
+09132:                 f'DataFrames (version {_PYARROW.__version__} is installed). '
      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_version_2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 9132, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_10 = __Pyx_PyObject_FormatSimple(__pyx_t_12, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 9132, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_17[0] = __pyx_mstate_global->__pyx_kp_u_pyarrow_14_0_0_is_required_for;
      __pyx_t_17[1] = __pyx_t_10;
      __pyx_t_17[2] = __pyx_mstate_global->__pyx_kp_u_is_installed_Upgrade_with_pip_i;
 09133:                 'Upgrade with `pip install -U pyarrow`.')
+09134:         chunk_rows = max_rows_per_batch
    __pyx_v_chunk_rows = __pyx_v_max_rows_per_batch;
+09135:         if chunk_rows > total_rows:
    __pyx_t_16 = (__pyx_v_chunk_rows > __pyx_v_total_rows);
    if (__pyx_t_16) {
/* … */
    }
+09136:             chunk_rows = total_rows
      __pyx_v_chunk_rows = __pyx_v_total_rows;
+09137:         first_batch = _PYARROW.Table.from_pandas(
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7questdb_7_client__PYARROW, __pyx_mstate_global->__pyx_n_u_Table); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_12 = __pyx_t_1;
    __Pyx_INCREF(__pyx_t_12);
+09138:             _capsule_slice_rows(sliceable, 0, chunk_rows))
    __pyx_t_10 = __pyx_f_7questdb_7_client__capsule_slice_rows(__pyx_v_sliceable, 0, __pyx_v_chunk_rows); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 9138, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_9 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_10};
      __pyx_t_8 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_pandas, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9137, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
    }
    __Pyx_DECREF_SET(__pyx_v_first_batch, __pyx_t_8);
    __pyx_t_8 = 0;
+09139:         schema = first_batch.schema
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_first_batch, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9139, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_v_schema = __pyx_t_8;
    __pyx_t_8 = 0;
 09140:     else:
+09141:         schema = _capsule_schema(sliceable, symbols)
  /*else*/ {
    __pyx_t_8 = __pyx_f_7questdb_7_client__capsule_schema(__pyx_v_sliceable, __pyx_v_symbols); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9141, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_v_schema = __pyx_t_8;
    __pyx_t_8 = 0;
  }
  __pyx_L24:;
+09142:     symbol_overrides = _resolve_symbols_to_overrides(
  __pyx_t_8 = __pyx_f_7questdb_7_client__resolve_symbols_to_overrides(__pyx_v_sliceable, __pyx_v_schema, __pyx_v_symbols); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9142, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_v_symbol_overrides = __pyx_t_8;
  __pyx_t_8 = 0;
 09143:         sliceable, schema, symbols)
+09144:     if symbol_overrides is None:
  __pyx_t_16 = (__pyx_v_symbol_overrides == Py_None);
  if (__pyx_t_16) {
/* … */
  }
+09145:         return False
    __pyx_r = 0;
    goto __pyx_L0;
+09146:     merged_overrides = _merge_capsule_overrides(
  __pyx_t_8 = __pyx_f_7questdb_7_client__merge_capsule_overrides(__pyx_v_symbol_overrides, __pyx_v_validated_overrides); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9146, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_v_merged_overrides = __pyx_t_8;
  __pyx_t_8 = 0;
 09147:         symbol_overrides, validated_overrides)
 09148:     # The claim lookup and the refusal judge each exported column by its
 09149:     # pandas dtype, and the export includes the frame's index levels.
+09150:     export_dtypes = _pandas_export_dtypes(df, pandas_dtypes)
  __pyx_t_8 = __pyx_f_7questdb_7_client__pandas_export_dtypes(__pyx_v_df, __pyx_v_pandas_dtypes); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9150, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_v_export_dtypes = __pyx_t_8;
  __pyx_t_8 = 0;
+09151:     roundtrip_overrides = _capsule_roundtrip_overrides(
  __pyx_t_8 = __pyx_f_7questdb_7_client__capsule_roundtrip_overrides(__pyx_v_sliceable, __pyx_v_export_dtypes); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_v_roundtrip_overrides = __pyx_t_8;
  __pyx_t_8 = 0;
 09152:         sliceable, export_dtypes)
+09153:     merged_overrides = _merge_capsule_overrides(
  __pyx_t_8 = __pyx_f_7questdb_7_client__merge_capsule_overrides(__pyx_v_roundtrip_overrides, __pyx_v_merged_overrides); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9153, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF_SET(__pyx_v_merged_overrides, __pyx_t_8);
  __pyx_t_8 = 0;
 09154:         roundtrip_overrides, merged_overrides)
+09155:     _refuse_unlabelled_fsb_pandas_columns(
  __pyx_t_13 = __pyx_f_7questdb_7_client__refuse_unlabelled_fsb_pandas_columns(__pyx_v_df, __pyx_v_export_dtypes, __pyx_v_merged_overrides); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9155, __pyx_L1_error)
 09156:         df, export_dtypes, merged_overrides)
+09157:     if merged_overrides:
  __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_v_merged_overrides); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 9157, __pyx_L1_error)
  if (__pyx_t_16) {
/* … */
  }
 09158:         # A `'binary'` override is a label for this client alone; the
 09159:         # native ingest gets the rest.
+09160:         for entry in merged_overrides:
    if (likely(PyList_CheckExact(__pyx_v_merged_overrides)) || PyTuple_CheckExact(__pyx_v_merged_overrides)) {
      __pyx_t_8 = __pyx_v_merged_overrides; __Pyx_INCREF(__pyx_t_8);
      __pyx_t_14 = 0;
      __pyx_t_18 = NULL;
    } else {
      __pyx_t_14 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_v_merged_overrides); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9160, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_18 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_8); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 9160, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_18)) {
        if (likely(PyList_CheckExact(__pyx_t_8))) {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_8);
            #if !CYTHON_ASSUME_SAFE_SIZE
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 9160, __pyx_L1_error)
            #endif
            if (__pyx_t_14 >= __pyx_temp) break;
          }
          __pyx_t_1 = __Pyx_PyList_GetItemRefFast(__pyx_t_8, __pyx_t_14, __Pyx_ReferenceSharing_OwnStrongReference);
          ++__pyx_t_14;
        } else {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_8);
            #if !CYTHON_ASSUME_SAFE_SIZE
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 9160, __pyx_L1_error)
            #endif
            if (__pyx_t_14 >= __pyx_temp) break;
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_14));
          #else
          __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_8, __pyx_t_14);
          #endif
          ++__pyx_t_14;
        }
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9160, __pyx_L1_error)
      } else {
        __pyx_t_1 = __pyx_t_18(__pyx_t_8);
        if (unlikely(!__pyx_t_1)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 9160, __pyx_L1_error)
            PyErr_Clear();
          }
          break;
        }
      }
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_entry, __pyx_t_1);
      __pyx_t_1 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+09161:             if entry[1] == _SCHEMA_OVERRIDE_BINARY:
      __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_entry, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9161, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_10 = __Pyx_PyLong_From_int(__pyx_v_7questdb_7_client__SCHEMA_OVERRIDE_BINARY); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 9161, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_12 = PyObject_RichCompare(__pyx_t_1, __pyx_t_10, Py_EQ); __Pyx_XGOTREF(__pyx_t_12); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 9161, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 9161, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      if (__pyx_t_16) {
/* … */
      }
+09162:                 binary_names.add(entry[0])
        __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_entry, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 9162, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_19 = PySet_Add(__pyx_v_binary_names, __pyx_t_12); if (unlikely(__pyx_t_19 == ((int)-1))) __PYX_ERR(0, 9162, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+09163:         if binary_names:
    {
      Py_ssize_t __pyx_temp = __Pyx_PySet_GET_SIZE(__pyx_v_binary_names);
      if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 9163, __pyx_L1_error)
      __pyx_t_16 = (__pyx_temp != 0);
    }

    if (__pyx_t_16) {
/* … */
    }
+09164:             merged_overrides = [
      { /* enter inner scope */
        __pyx_t_12 = PyList_New(0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 9164, __pyx_L39_error)
        __Pyx_GOTREF(__pyx_t_12);
+09165:                 entry for entry in merged_overrides
        if (likely(PyList_CheckExact(__pyx_v_merged_overrides)) || PyTuple_CheckExact(__pyx_v_merged_overrides)) {
          __pyx_t_10 = __pyx_v_merged_overrides; __Pyx_INCREF(__pyx_t_10);
          __pyx_t_14 = 0;
          __pyx_t_18 = NULL;
        } else {
          __pyx_t_14 = -1; __pyx_t_10 = PyObject_GetIter(__pyx_v_merged_overrides); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 9165, __pyx_L39_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_18 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_10); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 9165, __pyx_L39_error)
        }
        for (;;) {
          if (likely(!__pyx_t_18)) {
            if (likely(PyList_CheckExact(__pyx_t_10))) {
              {
                Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_10);
                #if !CYTHON_ASSUME_SAFE_SIZE
                if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 9165, __pyx_L39_error)
                #endif
                if (__pyx_t_14 >= __pyx_temp) break;
              }
              __pyx_t_1 = __Pyx_PyList_GetItemRefFast(__pyx_t_10, __pyx_t_14, __Pyx_ReferenceSharing_OwnStrongReference);
              ++__pyx_t_14;
            } else {
              {
                Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_10);
                #if !CYTHON_ASSUME_SAFE_SIZE
                if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 9165, __pyx_L39_error)
                #endif
                if (__pyx_t_14 >= __pyx_temp) break;
              }
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_10, __pyx_t_14));
              #else
              __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_10, __pyx_t_14);
              #endif
              ++__pyx_t_14;
            }
            if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9165, __pyx_L39_error)
          } else {
            __pyx_t_1 = __pyx_t_18(__pyx_t_10);
            if (unlikely(!__pyx_t_1)) {
              PyObject* exc_type = PyErr_Occurred();
              if (exc_type) {
                if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 9165, __pyx_L39_error)
                PyErr_Clear();
              }
              break;
            }
          }
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_XDECREF_SET(__pyx_9genexpr25__pyx_v_entry, __pyx_t_1);
          __pyx_t_1 = 0;
/* … */
            if (unlikely(__Pyx_ListComp_Append(__pyx_t_12, (PyObject*)__pyx_9genexpr25__pyx_v_entry))) __PYX_ERR(0, 9164, __pyx_L39_error)
/* … */
        }
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_XDECREF(__pyx_9genexpr25__pyx_v_entry); __pyx_9genexpr25__pyx_v_entry = 0;
        goto __pyx_L44_exit_scope;
        __pyx_L39_error:;
        __Pyx_XDECREF(__pyx_9genexpr25__pyx_v_entry); __pyx_9genexpr25__pyx_v_entry = 0;
        goto __pyx_L1_error;
        __pyx_L44_exit_scope:;
      } /* exit inner scope */
      __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 9164, __pyx_L1_error)
      if (!__pyx_t_16) {
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      } else {
        __Pyx_INCREF(__pyx_t_12);
        __pyx_t_8 = __pyx_t_12;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        goto __pyx_L35_bool_binop_done;
      }
+09166:                 if entry[1] != _SCHEMA_OVERRIDE_BINARY] or None
          __pyx_t_1 = __Pyx_GetItemInt(__pyx_9genexpr25__pyx_v_entry, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_SharedReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9166, __pyx_L39_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_11 = __Pyx_PyLong_From_int(__pyx_v_7questdb_7_client__SCHEMA_OVERRIDE_BINARY); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 9166, __pyx_L39_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_20 = PyObject_RichCompare(__pyx_t_1, __pyx_t_11, Py_NE); __Pyx_XGOTREF(__pyx_t_20); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 9166, __pyx_L39_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_20); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 9166, __pyx_L39_error)
          __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
          if (__pyx_t_16) {
/* … */
          }
/* … */
      __Pyx_INCREF(Py_None);
      __pyx_t_8 = Py_None;
      __pyx_L35_bool_binop_done:;
      __Pyx_DECREF_SET(__pyx_v_merged_overrides, __pyx_t_8);
      __pyx_t_8 = 0;
 09167: 
+09168:     can_slice = (total_rows >= 0) and (
  __pyx_t_7 = (__pyx_v_total_rows >= 0);
  if (__pyx_t_7) {
  } else {
    __pyx_t_16 = __pyx_t_7;
    goto __pyx_L45_bool_binop_done;
  }
+09169:         hasattr(sliceable, 'slice')
  __pyx_t_7 = __Pyx_HasAttr(__pyx_v_sliceable, __pyx_mstate_global->__pyx_n_u_slice); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 9169, __pyx_L1_error)
  if (!__pyx_t_7) {
  } else {
    __pyx_t_16 = __pyx_t_7;
    goto __pyx_L45_bool_binop_done;
  }
+09170:         or _is_pandas_dataframe_object(sliceable))
  __pyx_t_7 = __pyx_f_7questdb_7_client__is_pandas_dataframe_object(__pyx_v_sliceable); if (unlikely(__pyx_t_7 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 9170, __pyx_L1_error)
  __pyx_t_16 = __pyx_t_7;
  __pyx_L45_bool_binop_done:;
  __pyx_v_can_slice = __pyx_t_16;
 09171: 
+09172:     b = qdb_pystr_buf_new()
  __pyx_v_b = qdb_pystr_buf_new();
+09173:     memset(&c_schema, 0, sizeof(ArrowSchema))
  (void)(memset((&__pyx_v_c_schema), 0, (sizeof(struct ArrowSchema))));
+09174:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L53_try_end;
    __pyx_L48_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_20); __pyx_t_20 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
    __pyx_L50_except_error:;
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_4, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L53_try_end:;
  }
+09175:         try:
      /*try:*/ {
+09176:             str_to_table_name(b, <PyObject*>table_name, &c_table_name)
        __pyx_t_13 = __pyx_f_7questdb_7_client_str_to_table_name(__pyx_v_b, ((PyObject *)__pyx_v_table_name), (&__pyx_v_c_table_name)); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9176, __pyx_L55_error)
+09177:             if at_is_column:
        if (__pyx_v_at_is_column) {
/* … */
        }
+09178:                 str_to_column_name(b, at, &c_ts_column)
          __pyx_t_8 = __pyx_v_at;
          __Pyx_INCREF(__pyx_t_8);
          if (!(likely(PyUnicode_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_8))) __PYX_ERR(0, 9178, __pyx_L55_error)
          __pyx_t_13 = __pyx_f_7questdb_7_client_str_to_column_name(__pyx_v_b, ((PyObject*)__pyx_t_8), (&__pyx_v_c_ts_column)); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9178, __pyx_L55_error)
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+09179:                 c_ts_column_ptr = &c_ts_column
          __pyx_v_c_ts_column_ptr = (&__pyx_v_c_ts_column);
 09180: 
+09181:             if merged_overrides is not None:
        __pyx_t_16 = (__pyx_v_merged_overrides != Py_None);
        if (__pyx_t_16) {
/* … */
        }
+09182:                 c_overrides_len = len(merged_overrides)
          __pyx_t_14 = PyObject_Length(__pyx_v_merged_overrides); if (unlikely(__pyx_t_14 == ((Py_ssize_t)-1))) __PYX_ERR(0, 9182, __pyx_L55_error)
          __pyx_v_c_overrides_len = __pyx_t_14;
+09183:                 c_overrides = <qwp_arrow_override*>calloc(
          __pyx_v_c_overrides = ((struct qwp_arrow_override *)calloc(__pyx_v_c_overrides_len, (sizeof(struct qwp_arrow_override))));
 09184:                     c_overrides_len, sizeof(qwp_arrow_override))
+09185:                 if c_overrides == NULL:
          __pyx_t_16 = (__pyx_v_c_overrides == NULL);
          if (unlikely(__pyx_t_16)) {
/* … */
          }
+09186:                     raise MemoryError()
            PyErr_NoMemory(); __PYX_ERR(0, 9186, __pyx_L55_error)
+09187:                 for i in range(c_overrides_len):
          __pyx_t_9 = __pyx_v_c_overrides_len;
          __pyx_t_21 = __pyx_t_9;
          for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
            __pyx_v_i = __pyx_t_22;
+09188:                     name_bytes, kind_int, arg_int = merged_overrides[i]
            __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_merged_overrides, __pyx_v_i, size_t, 0, __Pyx_PyLong_FromSize_t, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9188, __pyx_L55_error)
            __Pyx_GOTREF(__pyx_t_8);
            if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) {
              PyObject* sequence = __pyx_t_8;
              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(0, 9188, __pyx_L55_error)
              }
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              if (likely(PyTuple_CheckExact(sequence))) {
                __pyx_t_12 = PyTuple_GET_ITEM(sequence, 0);
                __Pyx_INCREF(__pyx_t_12);
                __pyx_t_10 = PyTuple_GET_ITEM(sequence, 1);
                __Pyx_INCREF(__pyx_t_10);
                __pyx_t_20 = PyTuple_GET_ITEM(sequence, 2);
                __Pyx_INCREF(__pyx_t_20);
              } else {
                __pyx_t_12 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
                if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 9188, __pyx_L55_error)
                __Pyx_XGOTREF(__pyx_t_12);
                __pyx_t_10 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
                if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 9188, __pyx_L55_error)
                __Pyx_XGOTREF(__pyx_t_10);
                __pyx_t_20 = __Pyx_PyList_GetItemRefFast(sequence, 2, __Pyx_ReferenceSharing_SharedReference);
                if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 9188, __pyx_L55_error)
                __Pyx_XGOTREF(__pyx_t_20);
              }
              #else
              __pyx_t_12 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 9188, __pyx_L55_error)
              __Pyx_GOTREF(__pyx_t_12);
              __pyx_t_10 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 9188, __pyx_L55_error)
              __Pyx_GOTREF(__pyx_t_10);
              __pyx_t_20 = __Pyx_PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 9188, __pyx_L55_error)
              __Pyx_GOTREF(__pyx_t_20);
              #endif
              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            } else {
              Py_ssize_t index = -1;
              __pyx_t_11 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 9188, __pyx_L55_error)
              __Pyx_GOTREF(__pyx_t_11);
              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
              __pyx_t_23 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_11);
              index = 0; __pyx_t_12 = __pyx_t_23(__pyx_t_11); if (unlikely(!__pyx_t_12)) goto __pyx_L62_unpacking_failed;
              __Pyx_GOTREF(__pyx_t_12);
              index = 1; __pyx_t_10 = __pyx_t_23(__pyx_t_11); if (unlikely(!__pyx_t_10)) goto __pyx_L62_unpacking_failed;
              __Pyx_GOTREF(__pyx_t_10);
              index = 2; __pyx_t_20 = __pyx_t_23(__pyx_t_11); if (unlikely(!__pyx_t_20)) goto __pyx_L62_unpacking_failed;
              __Pyx_GOTREF(__pyx_t_20);
              if (__Pyx_IternextUnpackEndCheck(__pyx_t_23(__pyx_t_11), 3) < (0)) __PYX_ERR(0, 9188, __pyx_L55_error)
              __pyx_t_23 = NULL;
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
              goto __pyx_L63_unpacking_done;
              __pyx_L62_unpacking_failed:;
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
              __pyx_t_23 = NULL;
              if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
              __PYX_ERR(0, 9188, __pyx_L55_error)
              __pyx_L63_unpacking_done:;
            }
            __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_t_10); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 9188, __pyx_L55_error)
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
            __pyx_t_24 = __Pyx_PyLong_As_int(__pyx_t_20); if (unlikely((__pyx_t_24 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 9188, __pyx_L55_error)
            __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
            __Pyx_XDECREF_SET(__pyx_v_name_bytes, __pyx_t_12);
            __pyx_t_12 = 0;
            __pyx_v_kind_int = __pyx_t_6;
            __pyx_v_arg_int = __pyx_t_24;
+09189:                     c_overrides[i].column = PyBytes_AsString(name_bytes)
            __pyx_t_25 = PyBytes_AsString(__pyx_v_name_bytes); if (unlikely(__pyx_t_25 == ((void *)NULL))) __PYX_ERR(0, 9189, __pyx_L55_error)
            (__pyx_v_c_overrides[__pyx_v_i]).column = __pyx_t_25;
+09190:                     c_overrides[i].column_len = PyBytes_GET_SIZE(name_bytes)
            (__pyx_v_c_overrides[__pyx_v_i]).column_len = PyBytes_GET_SIZE(__pyx_v_name_bytes);
+09191:                     c_overrides[i].kind = <uint32_t>kind_int
            (__pyx_v_c_overrides[__pyx_v_i]).kind = ((uint32_t)__pyx_v_kind_int);
+09192:                     c_overrides[i].arg = <uint32_t>arg_int
            (__pyx_v_c_overrides[__pyx_v_i]).arg = ((uint32_t)__pyx_v_arg_int);
          }
 09193: 
+09194:             conn = _direct_conn_open_checked(src, budget_ms)
        __pyx_t_26 = __pyx_f_7questdb_7_client__direct_conn_open_checked(__pyx_v_src, __pyx_v_budget_ms); if (unlikely(__pyx_t_26 == ((void *)NULL))) __PYX_ERR(0, 9194, __pyx_L55_error)
        __pyx_v_conn = __pyx_t_26;
 09195: 
+09196:             try:
        {
          /*try:*/ {
/* … */
          }
          __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
          __Pyx_XDECREF(__pyx_t_28); __pyx_t_28 = 0;
          __Pyx_XDECREF(__pyx_t_29); __pyx_t_29 = 0;
          goto __pyx_L69_try_end;
          __pyx_L64_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_20); __pyx_t_20 = 0;
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
          __pyx_L66_except_error:;
          __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);
          goto __pyx_L55_error;
          __pyx_L69_try_end:;
        }
      }
+09197:                 if not can_slice:
            __pyx_t_16 = (!__pyx_v_can_slice);
            if (__pyx_t_16) {
/* … */
              goto __pyx_L70;
            }
 09198:                     # A one-shot stream (e.g. RecordBatchReader) cannot be
 09199:                     # re-exported for a whole-frame replay: a failed attempt
 09200:                     # must surface instead of retrying with the drained rest.
+09201:                     nonreplayable_consumed[0] = True
              (__pyx_v_nonreplayable_consumed[0]) = 1;
+09202:                     _capsule_consume_stream_with_hint(
              __pyx_t_13 = __pyx_f_7questdb_7_client__capsule_consume_stream_with_hint(__pyx_v_conn, __pyx_v_sliceable, __pyx_v_c_table_name, __pyx_v_c_ts_column_ptr, __pyx_v_at_scalar_set, __pyx_v_at_scalar_nanos, (&__pyx_v_c_schema), __pyx_v_c_overrides, __pyx_v_c_overrides_len, (&__pyx_v_any_flushed), (&__pyx_v_deferred_since_sync), __pyx_v_may_have_committed_prefix, __pyx_v_max_rows_per_batch, 0, __pyx_v_binary_names, __pyx_v_unlabelled); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9202, __pyx_L64_error)
 09203:                         conn, sliceable, c_table_name, c_ts_column_ptr,
 09204:                         at_scalar_set, at_scalar_nanos,
 09205:                         &c_schema, c_overrides, c_overrides_len,
 09206:                         &any_flushed, &deferred_since_sync,
 09207:                         may_have_committed_prefix, max_rows_per_batch, False,
 09208:                         binary_names, unlabelled)
 09209:                 else:
+09210:                     offset = 0
            /*else*/ {
              __pyx_v_offset = 0;
+09211:                     while offset < total_rows:
              while (1) {
                __pyx_t_16 = (__pyx_v_offset < __pyx_v_total_rows);
                if (!__pyx_t_16) break;
+09212:                         chunk_rows = max_rows_per_batch
                __pyx_v_chunk_rows = __pyx_v_max_rows_per_batch;
+09213:                         if chunk_rows > total_rows - offset:
                __pyx_t_16 = (__pyx_v_chunk_rows > (__pyx_v_total_rows - __pyx_v_offset));
                if (__pyx_t_16) {
/* … */
                }
+09214:                             chunk_rows = total_rows - offset
                  __pyx_v_chunk_rows = (__pyx_v_total_rows - __pyx_v_offset);
+09215:                         if first_batch is not None:
                __pyx_t_16 = (__pyx_v_first_batch != Py_None);
                if (__pyx_t_16) {
/* … */
                  goto __pyx_L74;
                }
+09216:                             row_slice = first_batch
                  __Pyx_INCREF(__pyx_v_first_batch);
                  __Pyx_DECREF_SET(__pyx_v_row_slice, __pyx_v_first_batch);
+09217:                             first_batch = None
                  __Pyx_INCREF(Py_None);
                  __Pyx_DECREF_SET(__pyx_v_first_batch, Py_None);
 09218:                         else:
+09219:                             row_slice = _capsule_slice_rows(
                /*else*/ {
/* … */
                  __pyx_t_8 = __pyx_f_7questdb_7_client__capsule_slice_rows(__pyx_v_sliceable, __pyx_v_offset, __pyx_v_chunk_rows); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9219, __pyx_L64_error)
                  __Pyx_GOTREF(__pyx_t_8);
                  __Pyx_DECREF_SET(__pyx_v_row_slice, __pyx_t_8);
                  __pyx_t_8 = 0;
                }
                __pyx_L74:;
 09220:                                 sliceable, offset, chunk_rows)
+09221:                         _capsule_consume_stream_with_hint(
                __pyx_t_13 = __pyx_f_7questdb_7_client__capsule_consume_stream_with_hint(__pyx_v_conn, __pyx_v_row_slice, __pyx_v_c_table_name, __pyx_v_c_ts_column_ptr, __pyx_v_at_scalar_set, __pyx_v_at_scalar_nanos, (&__pyx_v_c_schema), __pyx_v_c_overrides, __pyx_v_c_overrides_len, (&__pyx_v_any_flushed), (&__pyx_v_deferred_since_sync), __pyx_v_may_have_committed_prefix, __pyx_v_max_rows_per_batch, 1, __pyx_v_binary_names, __pyx_v_unlabelled); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9221, __pyx_L64_error)
 09222:                             conn, row_slice, c_table_name, c_ts_column_ptr,
 09223:                             at_scalar_set, at_scalar_nanos,
 09224:                             &c_schema, c_overrides, c_overrides_len,
 09225:                             &any_flushed, &deferred_since_sync,
 09226:                             may_have_committed_prefix, max_rows_per_batch, True,
 09227:                             binary_names, unlabelled)
+09228:                         offset += chunk_rows
                __pyx_v_offset = (__pyx_v_offset + __pyx_v_chunk_rows);
              }
            }
            __pyx_L70:;
+09229:                 if any_flushed:
            if (__pyx_v_any_flushed) {
/* … */
            }
+09230:                     _dataframe_columnar_sync(conn)
              __pyx_t_13 = __pyx_f_7questdb_7_client__dataframe_columnar_sync(__pyx_v_conn); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9230, __pyx_L64_error)
+09231:             except:
          /*except:*/ {
            __Pyx_AddTraceback("questdb._client._dataframe_client_try_capsule_path", __pyx_clineno, __pyx_lineno, __pyx_filename);
            if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_20, &__pyx_t_10) < 0) __PYX_ERR(0, 9231, __pyx_L66_except_error)
            __Pyx_XGOTREF(__pyx_t_8);
            __Pyx_XGOTREF(__pyx_t_20);
            __Pyx_XGOTREF(__pyx_t_10);
+09232:                 force_drop_conn = _dataframe_columnar_force_drop_after_error(
            __pyx_v_force_drop_conn = __pyx_f_7questdb_7_client__dataframe_columnar_force_drop_after_error(__pyx_v_conn, __pyx_v_any_flushed);
 09233:                     conn, any_flushed)
+09234:                 raise
            __Pyx_GIVEREF(__pyx_t_8);
            __Pyx_GIVEREF(__pyx_t_20);
            __Pyx_XGIVEREF(__pyx_t_10);
            __Pyx_ErrRestoreWithState(__pyx_t_8, __pyx_t_20, __pyx_t_10);
            __pyx_t_8 = 0;  __pyx_t_20 = 0;  __pyx_t_10 = 0; 
            __PYX_ERR(0, 9234, __pyx_L66_except_error)
          }
 09235:         finally:
+09236:             _ensure_has_gil(&gs)
      /*finally:*/ {
        /*normal exit:*/{
          __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
/* … */
            __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+09237:             if conn != NULL:
          __pyx_t_16 = (__pyx_v_conn != NULL);
          if (__pyx_t_16) {
/* … */
          }
/* … */
            __pyx_t_16 = (__pyx_v_conn != NULL);
            if (__pyx_t_16) {
/* … */
            }
+09238:                 with nogil:
            {
                PyThreadState * _save;
                _save = PyEval_SaveThread();
                __Pyx_FastGIL_Remember();
                /*try:*/ {
/* … */
                /*finally:*/ {
                  /*normal exit:*/{
                    __Pyx_FastGIL_Forget();
                    PyEval_RestoreThread(_save);
                    goto __pyx_L81;
                  }
                  __pyx_L81:;
                }
            }
/* … */
              {
                  PyThreadState * _save;
                  _save = PyEval_SaveThread();
                  __Pyx_FastGIL_Remember();
                  /*try:*/ {
/* … */
                  /*finally:*/ {
                    /*normal exit:*/{
                      __Pyx_FastGIL_Forget();
                      PyEval_RestoreThread(_save);
                      goto __pyx_L90;
                    }
                    __pyx_L90:;
                  }
              }
+09239:                     _direct_conn_close(src, conn, force_drop_conn)
                  __pyx_f_7questdb_7_client__direct_conn_close(__pyx_v_src, __pyx_v_conn, __pyx_v_force_drop_conn);
                }
/* … */
                    __pyx_f_7questdb_7_client__direct_conn_close(__pyx_v_src, __pyx_v_conn, __pyx_v_force_drop_conn);
                  }
+09240:             if c_schema.release != NULL:
          __pyx_t_16 = (__pyx_v_c_schema.release != NULL);
          if (__pyx_t_16) {
/* … */
          }
/* … */
            __pyx_t_16 = (__pyx_v_c_schema.release != NULL);
            if (__pyx_t_16) {
/* … */
            }
+09241:                 c_schema.release(&c_schema)
            __pyx_v_c_schema.release((&__pyx_v_c_schema));
/* … */
              __pyx_v_c_schema.release((&__pyx_v_c_schema));
+09242:             if c_overrides != NULL:
          __pyx_t_16 = (__pyx_v_c_overrides != NULL);
          if (__pyx_t_16) {
/* … */
          }
/* … */
            __pyx_t_16 = (__pyx_v_c_overrides != NULL);
            if (__pyx_t_16) {
/* … */
            }
+09243:                 free(c_overrides)
            free(__pyx_v_c_overrides);
/* … */
              free(__pyx_v_c_overrides);
+09244:             if b != NULL:
          __pyx_t_16 = (__pyx_v_b != NULL);
          if (__pyx_t_16) {
/* … */
          }
          goto __pyx_L56;
        }
        __pyx_L55_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_29 = 0; __pyx_t_28 = 0; __pyx_t_27 = 0; __pyx_t_31 = 0; __pyx_t_32 = 0; __pyx_t_33 = 0;
          __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_20); __pyx_t_20 = 0;
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
           __Pyx_ExceptionSwap(&__pyx_t_31, &__pyx_t_32, &__pyx_t_33);
          if ( unlikely(__Pyx_GetException(&__pyx_t_29, &__pyx_t_28, &__pyx_t_27) < 0)) __Pyx_ErrFetch(&__pyx_t_29, &__pyx_t_28, &__pyx_t_27);
          __Pyx_XGOTREF(__pyx_t_29);
          __Pyx_XGOTREF(__pyx_t_28);
          __Pyx_XGOTREF(__pyx_t_27);
          __Pyx_XGOTREF(__pyx_t_31);
          __Pyx_XGOTREF(__pyx_t_32);
          __Pyx_XGOTREF(__pyx_t_33);
          __pyx_t_24 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_30 = __pyx_filename;
          {
/* … */
            __pyx_t_16 = (__pyx_v_b != NULL);
            if (__pyx_t_16) {
/* … */
            }
          }
          __Pyx_XGIVEREF(__pyx_t_31);
          __Pyx_XGIVEREF(__pyx_t_32);
          __Pyx_XGIVEREF(__pyx_t_33);
          __Pyx_ExceptionReset(__pyx_t_31, __pyx_t_32, __pyx_t_33);
          __Pyx_XGIVEREF(__pyx_t_29);
          __Pyx_XGIVEREF(__pyx_t_28);
          __Pyx_XGIVEREF(__pyx_t_27);
          __Pyx_ErrRestore(__pyx_t_29, __pyx_t_28, __pyx_t_27);
          __pyx_t_29 = 0; __pyx_t_28 = 0; __pyx_t_27 = 0; __pyx_t_31 = 0; __pyx_t_32 = 0; __pyx_t_33 = 0;
          __pyx_lineno = __pyx_t_24; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_30;
          goto __pyx_L48_error;
        }
        __pyx_L56:;
      }
+09245:                 qdb_pystr_buf_free(b)
            qdb_pystr_buf_free(__pyx_v_b);
/* … */
              qdb_pystr_buf_free(__pyx_v_b);
+09246:     except BaseException:
    __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
    if (__pyx_t_6) {
      __Pyx_AddTraceback("questdb._client._dataframe_client_try_capsule_path", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_10, &__pyx_t_20, &__pyx_t_8) < 0) __PYX_ERR(0, 9246, __pyx_L50_except_error)
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_20);
      __Pyx_XGOTREF(__pyx_t_8);
 09247:         # A batch that went out may have created the table with these
 09248:         # columns as BINARY, so a failed write still reports them, once
 09249:         # its connection is closed. The write's own error is the one the
 09250:         # caller needs, so a handler that raises is not let replace it.
+09251:         if any_flushed:
      if (__pyx_v_any_flushed) {
/* … */
      }
+09252:             try:
        {
          /*try:*/ {
/* … */
          }
          __Pyx_XDECREF(__pyx_t_33); __pyx_t_33 = 0;
          __Pyx_XDECREF(__pyx_t_32); __pyx_t_32 = 0;
          __Pyx_XDECREF(__pyx_t_31); __pyx_t_31 = 0;
          goto __pyx_L104_try_end;
          __pyx_L97_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_L99_except_error:;
          __Pyx_XGIVEREF(__pyx_t_33);
          __Pyx_XGIVEREF(__pyx_t_32);
          __Pyx_XGIVEREF(__pyx_t_31);
          __Pyx_ExceptionReset(__pyx_t_33, __pyx_t_32, __pyx_t_31);
          goto __pyx_L50_except_error;
          __pyx_L98_exception_handled:;
          __Pyx_XGIVEREF(__pyx_t_33);
          __Pyx_XGIVEREF(__pyx_t_32);
          __Pyx_XGIVEREF(__pyx_t_31);
          __Pyx_ExceptionReset(__pyx_t_33, __pyx_t_32, __pyx_t_31);
          __pyx_L104_try_end:;
        }
+09253:                 _log_unlabelled_fsb_columns(unlabelled)
            __pyx_t_13 = __pyx_f_7questdb_7_client__log_unlabelled_fsb_columns(__pyx_v_unlabelled); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9253, __pyx_L97_error)
+09254:             except Exception:
          __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
          if (__pyx_t_6) {
            __Pyx_ErrRestore(0,0,0);
            goto __pyx_L98_exception_handled;
          }
          goto __pyx_L99_except_error;
 09255:                 pass
+09256:         raise
      __Pyx_GIVEREF(__pyx_t_10);
      __Pyx_GIVEREF(__pyx_t_20);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ErrRestoreWithState(__pyx_t_10, __pyx_t_20, __pyx_t_8);
      __pyx_t_10 = 0;  __pyx_t_20 = 0;  __pyx_t_8 = 0; 
      __PYX_ERR(0, 9256, __pyx_L50_except_error)
    }
    goto __pyx_L50_except_error;
 09257:     # Only once the write has gone through and its connection is closed,
 09258:     # so a logging handler cannot re-enter a write in progress.
+09259:     _log_unlabelled_fsb_columns(unlabelled)
  __pyx_t_13 = __pyx_f_7questdb_7_client__log_unlabelled_fsb_columns(__pyx_v_unlabelled); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9259, __pyx_L1_error)
+09260:     return True
  __pyx_r = 1;
  goto __pyx_L0;
 09261: 
 09262: 
+09263: cdef void_int _dataframe_numpy_publish(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__dataframe_numpy_publish(struct __pyx_t_7questdb_7_client_direct_conn_source_t *__pyx_v_src, uint64_t __pyx_v_budget_ms, struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan, PyObject *__pyx_v_df, PyObject *__pyx_v_table_name, PyObject *__pyx_v_table_name_col, PyObject *__pyx_v_symbols, PyObject *__pyx_v_at, size_t __pyx_v_max_rows_per_batch, int *__pyx_v_may_have_committed_prefix) {
  struct qwp_chunk *__pyx_v_chunk;
  struct qwp_direct_sender *__pyx_v_conn;
  struct line_sender_error *__pyx_v_err;
  PyThreadState *__pyx_v_gs;
  int __pyx_v_flushed;
  int __pyx_v_force_drop_conn;
  size_t __pyx_v_rows_per_chunk;
  size_t __pyx_v_row_offset;
  size_t __pyx_v_chunk_rows;
  __pyx_t_7questdb_7_client_void_int __pyx_r;
  __Pyx_INCREF(__pyx_v_df);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("questdb._client._dataframe_numpy_publish", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_df);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 09264:         direct_conn_source_t* src,
 09265:         uint64_t budget_ms,
 09266:         qdb_pystr_buf* b,
 09267:         dataframe_plan_t* plan,
 09268:         object df,
 09269:         object table_name,
 09270:         object table_name_col,
 09271:         object symbols,
 09272:         object at,
 09273:         size_t max_rows_per_batch,
 09274:         bint* may_have_committed_prefix) except -1:
+09275:     cdef qwp_chunk* chunk = NULL
  __pyx_v_chunk = NULL;
+09276:     cdef qwp_direct_sender* conn = NULL
  __pyx_v_conn = NULL;
+09277:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+09278:     cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+09279:     cdef bint flushed = False
  __pyx_v_flushed = 0;
+09280:     cdef bint force_drop_conn = False
  __pyx_v_force_drop_conn = 0;
 09281:     cdef size_t rows_per_chunk
 09282:     cdef size_t row_offset
 09283:     cdef size_t chunk_rows
+09284:     try:
  /*try:*/ {
+09285:         df = _dataframe_normalize_nullable(df)
    __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_normalize_nullable(__pyx_v_df); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9285, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_df, __pyx_t_1);
    __pyx_t_1 = 0;
+09286:         df = _dataframe_normalize_claimed_arrow(df)
    __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_normalize_claimed_arrow(__pyx_v_df); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9286, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_df, __pyx_t_1);
    __pyx_t_1 = 0;
+09287:         df = _dataframe_normalize_claimed_date(df)
    __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_normalize_claimed_date(__pyx_v_df); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9287, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_df, __pyx_t_1);
    __pyx_t_1 = 0;
+09288:         df = _dataframe_normalize_at_timestamp(df, at)
    __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe_normalize_at_timestamp(__pyx_v_df, __pyx_v_at); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9288, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_df, __pyx_t_1);
    __pyx_t_1 = 0;
+09289:         _dataframe_plan_build(
    __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_plan_build(__pyx_v_b, __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at, __pyx_v_plan, ((PyObject*)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9289, __pyx_L4_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 09290:             b,
 09291:             df,
 09292:             table_name,
 09293:             table_name_col,
 09294:             symbols,
 09295:             at,
 09296:             plan,
+09297:             _FIELD_TARGETS_QWP)
    __pyx_t_1 = __pyx_v_7questdb_7_client__FIELD_TARGETS_QWP;
    __Pyx_INCREF(__pyx_t_1);
+09298:         if (plan.col_count == 0) or (plan.row_count == 0):
    __pyx_t_4 = (__pyx_v_plan->col_count == 0);
    if (!__pyx_t_4) {
    } else {
      __pyx_t_3 = __pyx_t_4;
      goto __pyx_L7_bool_binop_done;
    }
    __pyx_t_4 = (__pyx_v_plan->row_count == 0);
    __pyx_t_3 = __pyx_t_4;
    __pyx_L7_bool_binop_done:;
    if (__pyx_t_3) {
/* … */
    }
+09299:             return 0
      __pyx_r = 0;
      goto __pyx_L3_return;
 09300: 
+09301:         _dataframe_apply_roundtrip_overrides(df, plan)
    __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_apply_roundtrip_overrides(__pyx_v_df, __pyx_v_plan); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9301, __pyx_L4_error)
+09302:         _dataframe_columnar_promote_cols(df, plan)
    __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_promote_cols(__pyx_v_df, __pyx_v_plan); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9302, __pyx_L4_error)
+09303:         _dataframe_columnar_validate_plan(df, plan)
    __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_validate_plan(__pyx_v_df, __pyx_v_plan); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9303, __pyx_L4_error)
+09304:         _dataframe_columnar_prebuild_pyobj(df, plan)
    __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_prebuild_pyobj(__pyx_v_df, __pyx_v_plan); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9304, __pyx_L4_error)
+09305:         rows_per_chunk = _dataframe_columnar_rows_per_chunk(
    __pyx_v_rows_per_chunk = __pyx_f_7questdb_7_client__dataframe_columnar_rows_per_chunk(__pyx_v_plan, __pyx_v_max_rows_per_batch);
 09306:             plan, max_rows_per_batch)
 09307: 
+09308:         conn = _direct_conn_open_checked(src, budget_ms)
    __pyx_t_5 = __pyx_f_7questdb_7_client__direct_conn_open_checked(__pyx_v_src, __pyx_v_budget_ms); if (unlikely(__pyx_t_5 == ((void *)NULL))) __PYX_ERR(0, 9308, __pyx_L4_error)
    __pyx_v_conn = __pyx_t_5;
 09309: 
+09310:         chunk = qwp_chunk_new(
    __pyx_v_chunk = qwp_chunk_new(__pyx_v_plan->c_table_name.buf, __pyx_v_plan->c_table_name.len, (&__pyx_v_err));
 09311:             plan.c_table_name.buf,
 09312:             plan.c_table_name.len,
 09313:             &err)
+09314:         if chunk == NULL:
    __pyx_t_3 = (__pyx_v_chunk == NULL);
    if (unlikely(__pyx_t_3)) {
/* … */
    }
+09315:             raise c_err_to_py(err)
      __pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9315, __pyx_L4_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(0, 9315, __pyx_L4_error)
+09316:         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_L15_try_end;
      __pyx_L10_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
      __pyx_L12_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_L4_error;
      __pyx_L15_try_end:;
    }
+09317:             row_offset = 0
        __pyx_v_row_offset = 0;
+09318:             while row_offset < plan.row_count:
        while (1) {
          __pyx_t_3 = (__pyx_v_row_offset < __pyx_v_plan->row_count);
          if (!__pyx_t_3) break;
+09319:                 if not qwp_chunk_clear(chunk, &err):
          __pyx_t_3 = (!qwp_chunk_clear(__pyx_v_chunk, (&__pyx_v_err)));
          if (unlikely(__pyx_t_3)) {
/* … */
          }
+09320:                     raise c_err_to_py(err)
            __pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9320, __pyx_L10_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(0, 9320, __pyx_L10_error)
+09321:                 chunk_rows = rows_per_chunk
          __pyx_v_chunk_rows = __pyx_v_rows_per_chunk;
+09322:                 if chunk_rows > plan.row_count - row_offset:
          __pyx_t_3 = (__pyx_v_chunk_rows > (__pyx_v_plan->row_count - __pyx_v_row_offset));
          if (__pyx_t_3) {
/* … */
          }
+09323:                     chunk_rows = plan.row_count - row_offset
            __pyx_v_chunk_rows = (__pyx_v_plan->row_count - __pyx_v_row_offset);
+09324:                 _dataframe_columnar_populate_chunk(
          __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_populate_chunk(__pyx_v_plan, __pyx_v_chunk, __pyx_v_row_offset, __pyx_v_chunk_rows); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9324, __pyx_L10_error)
 09325:                     plan,
 09326:                     chunk,
 09327:                     row_offset,
 09328:                     chunk_rows)
+09329:                 _dataframe_columnar_flush(
          __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_flush(__pyx_v_conn, __pyx_v_chunk, 1, __pyx_v_may_have_committed_prefix); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9329, __pyx_L10_error)
 09330:                     conn,
 09331:                     chunk,
 09332:                     True,
 09333:                     may_have_committed_prefix)
+09334:                 flushed = True
          __pyx_v_flushed = 1;
+09335:                 row_offset += chunk_rows
          __pyx_v_row_offset = (__pyx_v_row_offset + __pyx_v_chunk_rows);
        }
 09336: 
+09337:             _dataframe_columnar_sync(conn)
        __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_columnar_sync(__pyx_v_conn); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9337, __pyx_L10_error)
+09338:         except:
      /*except:*/ {
        __Pyx_AddTraceback("questdb._client._dataframe_numpy_publish", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_9, &__pyx_t_10) < 0) __PYX_ERR(0, 9338, __pyx_L12_except_error)
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_10);
+09339:             force_drop_conn = _dataframe_columnar_force_drop_after_error(
        __pyx_v_force_drop_conn = __pyx_f_7questdb_7_client__dataframe_columnar_force_drop_after_error(__pyx_v_conn, __pyx_v_flushed);
 09340:                 conn, flushed)
+09341:             raise
        __Pyx_GIVEREF(__pyx_t_1);
        __Pyx_GIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_9, __pyx_t_10);
        __pyx_t_1 = 0;  __pyx_t_9 = 0;  __pyx_t_10 = 0; 
        __PYX_ERR(0, 9341, __pyx_L12_except_error)
      }
 09342: 
+09343:         return 0
    __pyx_r = 0;
    goto __pyx_L3_return;
  }
 09344:     finally:
+09345:         _ensure_has_gil(&gs)
  /*finally:*/ {
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 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_8, &__pyx_t_7, &__pyx_t_6) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_7, &__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_14);
      __Pyx_XGOTREF(__pyx_t_15);
      __Pyx_XGOTREF(__pyx_t_16);
      __pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
      {
        __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
/* … */
      __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+09346:         if conn != NULL:
        __pyx_t_3 = (__pyx_v_conn != NULL);
        if (__pyx_t_3) {
/* … */
        }
/* … */
      __pyx_t_3 = (__pyx_v_conn != NULL);
      if (__pyx_t_3) {
/* … */
      }
+09347:             with nogil:
          {
              PyThreadState * _save;
              _save = PyEval_SaveThread();
              __Pyx_FastGIL_Remember();
              /*try:*/ {
/* … */
              /*finally:*/ {
                /*normal exit:*/{
                  __Pyx_FastGIL_Forget();
                  PyEval_RestoreThread(_save);
                  goto __pyx_L27;
                }
                __pyx_L27:;
              }
          }
/* … */
        {
            PyThreadState * _save;
            _save = PyEval_SaveThread();
            __Pyx_FastGIL_Remember();
            /*try:*/ {
/* … */
            /*finally:*/ {
              /*normal exit:*/{
                __Pyx_FastGIL_Forget();
                PyEval_RestoreThread(_save);
                goto __pyx_L32;
              }
              __pyx_L32:;
            }
        }
+09348:                 _direct_conn_close(src, conn, force_drop_conn)
                __pyx_f_7questdb_7_client__direct_conn_close(__pyx_v_src, __pyx_v_conn, __pyx_v_force_drop_conn);
              }
/* … */
              __pyx_f_7questdb_7_client__direct_conn_close(__pyx_v_src, __pyx_v_conn, __pyx_v_force_drop_conn);
            }
+09349:         if chunk != NULL:
        __pyx_t_3 = (__pyx_v_chunk != NULL);
        if (__pyx_t_3) {
/* … */
        }
/* … */
      __pyx_t_3 = (__pyx_v_chunk != NULL);
      if (__pyx_t_3) {
/* … */
      }
+09350:             qwp_chunk_free(chunk)
          qwp_chunk_free(__pyx_v_chunk);
/* … */
        qwp_chunk_free(__pyx_v_chunk);
 09351:         # The plan is rebuilt on each failover attempt; release this
 09352:         # attempt's plan so a re-send starts from a blank plan.
+09353:         dataframe_plan_release(plan)
        __pyx_f_7questdb_7_client_dataframe_plan_release(__pyx_v_plan);
/* … */
      __pyx_f_7questdb_7_client_dataframe_plan_release(__pyx_v_plan);
+09354:         plan[0] = dataframe_plan_blank()
        (__pyx_v_plan[0]) = __pyx_f_7questdb_7_client_dataframe_plan_blank();
      }
      __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_8);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_ErrRestore(__pyx_t_8, __pyx_t_7, __pyx_t_6);
      __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
      __pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
      goto __pyx_L1_error;
    }
    __pyx_L3_return: {
      __pyx_t_2 = __pyx_r;
/* … */
      (__pyx_v_plan[0]) = __pyx_f_7questdb_7_client_dataframe_plan_blank();
      __pyx_r = __pyx_t_2;
      goto __pyx_L0;
    }
  }
 09355: 
 09356: 
+09357: cdef object _dataframe_call_error(object exc, str msg, bint in_doubt):
static PyObject *__pyx_f_7questdb_7_client__dataframe_call_error(PyObject *__pyx_v_exc, PyObject *__pyx_v_msg, int __pyx_v_in_doubt) {
  PyObject *__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_3);
  __Pyx_AddTraceback("questdb._client._dataframe_call_error", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_out);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 09358:     """`exc` again, as a new object of the same class carrying `msg` and
 09359:     `in_doubt`, for `raise ... from exc`.
 09360: 
 09361:     A DataFrame call reports facts the failed operation could not know: an
 09362:     earlier batch of the same call may have committed, or a one-shot input
 09363:     was consumed. The original stays reachable as `__cause__`, where its own
 09364:     `in_doubt` still describes the failed operation alone. The class and every
 09365:     field are kept, so a typed subclass -- a `QuestDBServerRejectionError`, or
 09366:     an `OidcError` from an `oidc_auth=` transport -- still matches its own
 09367:     `except` and keeps `.sender_error`, `.status`, `.retry_after` and the rest,
 09368:     which rebuilding it as a plain `QuestDBError` would drop.
 09369:     """
+09370:     cdef object out = _error_with_message(exc, msg)
  __pyx_t_1 = __pyx_f_7questdb_7_client__error_with_message(__pyx_v_exc, __pyx_v_msg); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9370, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = __pyx_t_1;
  __pyx_t_1 = 0;
+09371:     out._in_doubt = bool(in_doubt)
  __pyx_t_2 = NULL;
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_v_in_doubt); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9371, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __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_1)) __PYX_ERR(0, 9371, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_1);
  }
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_out, __pyx_mstate_global->__pyx_n_u_in_doubt_2, ((PyObject *)__pyx_t_1)) < (0)) __PYX_ERR(0, 9371, __pyx_L1_error)
  __Pyx_DECREF((PyObject *)__pyx_t_1); __pyx_t_1 = 0;
+09372:     return out
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;
 09373: 
 09374: 
+09375: cdef void_int _direct_dataframe_run(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__direct_dataframe_run(struct __pyx_t_7questdb_7_client_direct_conn_source_t *__pyx_v_src, double __pyx_v_reconnect_max_s, struct qdb_pystr_buf *__pyx_v_b, struct __pyx_t_7questdb_7_client_dataframe_plan_t *__pyx_v_plan, PyObject *__pyx_v_df, PyObject *__pyx_v_table_name, PyObject *__pyx_v_table_name_col, PyObject *__pyx_v_symbols, PyObject *__pyx_v_at, size_t __pyx_v_max_rows_per_batch, PyObject *__pyx_v_schema_overrides, PyObject *__pyx_v_oidc_auth) {
  uint64_t __pyx_v_budget_ms;
  double __pyx_v_deadline;
  double __pyx_v_remaining;
  int __pyx_v_may_have_committed_prefix;
  int __pyx_v_nonreplayable_consumed;
  int __pyx_v_call_in_doubt;
  int __pyx_v_oidc_terminal;
  int __pyx_v_oidc_terminal_probe_used;
  int __pyx_v_connect_final;
  PyObject *__pyx_v_validated_overrides = 0;
  int64_t __pyx_v_at_micros;
  PyObject *__pyx_v_ve = NULL;
  PyObject *__pyx_v_exc = NULL;
  PyObject *__pyx_v_probe_exc = NULL;
  PyObject *__pyx_v_oidc_errors = NULL;
  __pyx_t_7questdb_7_client_void_int __pyx_r;
  __Pyx_INCREF(__pyx_v_df);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __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_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_AddTraceback("questdb._client._direct_dataframe_run", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_validated_overrides);
  __Pyx_XDECREF(__pyx_v_ve);
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_XDECREF(__pyx_v_probe_exc);
  __Pyx_XDECREF(__pyx_v_oidc_errors);
  __Pyx_XDECREF(__pyx_v_df);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 09376:         direct_conn_source_t* src,
 09377:         double reconnect_max_s,
 09378:         qdb_pystr_buf* b,
 09379:         dataframe_plan_t* plan,
 09380:         object df,
 09381:         object table_name,
 09382:         object table_name_col,
 09383:         object symbols,
 09384:         object at,
 09385:         size_t max_rows_per_batch,
 09386:         object schema_overrides,
 09387:         object oidc_auth) except -1:
+09388:     cdef uint64_t budget_ms = 0
  __pyx_v_budget_ms = 0;
+09389:     cdef double deadline = 0.0
  __pyx_v_deadline = 0.0;
+09390:     cdef double remaining = 0.0
  __pyx_v_remaining = 0.0;
+09391:     cdef bint may_have_committed_prefix = False
  __pyx_v_may_have_committed_prefix = 0;
+09392:     cdef bint nonreplayable_consumed = False
  __pyx_v_nonreplayable_consumed = 0;
+09393:     cdef bint call_in_doubt = False
  __pyx_v_call_in_doubt = 0;
+09394:     cdef bint oidc_terminal = False
  __pyx_v_oidc_terminal = 0;
+09395:     cdef bint oidc_terminal_probe_used = False
  __pyx_v_oidc_terminal_probe_used = 0;
+09396:     cdef bint connect_final = False
  __pyx_v_connect_final = 0;
+09397:     cdef object validated_overrides = _validate_schema_overrides(
  __pyx_t_1 = __pyx_f_7questdb_7_client__validate_schema_overrides(__pyx_v_schema_overrides); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_validated_overrides = __pyx_t_1;
  __pyx_t_1 = 0;
 09398:         schema_overrides)
+09399:     if max_rows_per_batch <= 0:
  __pyx_t_2 = (__pyx_v_max_rows_per_batch <= 0);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+09400:         raise ValueError('max_rows_per_batch must be >= 1.')
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_max_rows_per_batch_must_be_1};
      __pyx_t_1 = __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;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9400, __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(0, 9400, __pyx_L1_error)
+09401:     src.slice_for_oidc = oidc_auth is not None
  __pyx_t_2 = (__pyx_v_oidc_auth != Py_None);
  __pyx_v_src->slice_for_oidc = __pyx_t_2;
+09402:     if table_name is not None and table_name_col is not None:
  __pyx_t_5 = (__pyx_v_table_name != Py_None);
  if (__pyx_t_5) {
  } else {
    __pyx_t_2 = __pyx_t_5;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_5 = (__pyx_v_table_name_col != Py_None);
  __pyx_t_2 = __pyx_t_5;
  __pyx_L5_bool_binop_done:;
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+09403:         raise ValueError(
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Can_specify_only_one_of_table_na};
      __pyx_t_1 = __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;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9403, __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(0, 9403, __pyx_L1_error)
 09404:             'Can specify only one of `table_name` or `table_name_col`.')
+09405:     if table_name_col is not None:
  __pyx_t_2 = (__pyx_v_table_name_col != Py_None);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
 09406:         # This path writes one table per call, so it has nowhere to put
 09407:         # a table-name column. The check runs before the planner looks
 09408:         # at any column, so the error always says the same thing. Later
 09409:         # on, a column the planner cannot type by itself — a 32-byte
 09410:         # binary with no type claim, say — would raise first and point
 09411:         # at the wrong problem.
+09412:         raise UnsupportedDataFrameShapeError(
    __pyx_t_3 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_UnsupportedDataFrameShapeError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9412, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __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[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_QWP_column_ingestion_writes_one};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __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_1)) __PYX_ERR(0, 9412, __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(0, 9412, __pyx_L1_error)
 09413:             'QWP column ingestion writes one table per call and does '
 09414:             'not accept `table_name_col`. That is QuestDB.dataframe() '
 09415:             'and Sender.dataframe() over ws:: / wss::. Split the frame '
 09416:             'on that column and make one call per table, e.g. '
 09417:             "`for name, group in df.groupby('tbl'): "
 09418:             "dataframe(group.drop(columns='tbl'), table_name=name, "
 09419:             "at='ts')`. Those calls take `symbols` and "
 09420:             "`schema_overrides` and read `df.attrs['questdb']`, so "
 09421:             'LONG256 and the other column types work as normal. '
 09422:             'Sender.dataframe() over tcp:: / http:: does accept '
 09423:             '`table_name_col`: it serializes row by row, so it can '
 09424:             'change table between rows.')
+09425:     if isinstance(at, datetime.datetime):
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9425, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9425, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_at, __pyx_t_6); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 9425, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (__pyx_t_2) {
/* … */
  }
+09426:         if at != at:
    __pyx_t_6 = PyObject_RichCompare(__pyx_v_at, __pyx_v_at, Py_NE); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9426, __pyx_L1_error)
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 9426, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(__pyx_t_2)) {
/* … */
    }
+09427:             raise QuestDBError(
      __pyx_t_1 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9427, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
+09428:                 QuestDBErrorCode.InvalidTimestamp,
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 9428, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9428, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_4 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
        assert(__pyx_t_1);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
        __pyx_t_4 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_8, __pyx_mstate_global->__pyx_kp_u_Bad_argument_at_NaT_is_not_a_val};
        __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9427, __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(0, 9427, __pyx_L1_error)
 09429:                 'Bad argument `at`: NaT is not a valid timestamp.')
+09430:         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_L15_try_end;
      __pyx_L10_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 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_L12_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_L15_try_end:;
    }
+09431:             at_micros = datetime_to_micros(at)
        if (!(likely(((__pyx_v_at) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_at, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime))))) __PYX_ERR(0, 9431, __pyx_L10_error)
        __pyx_t_12 = __pyx_f_7questdb_7_client_datetime_to_micros(((PyDateTime_DateTime *)__pyx_v_at)); if (unlikely(__pyx_t_12 == ((int64_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 9431, __pyx_L10_error)
        __pyx_v_at_micros = __pyx_t_12;
+09432:         except ValueError as ve:
      __pyx_t_13 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_ValueError))));
      if (__pyx_t_13) {
        __Pyx_AddTraceback("questdb._client._direct_dataframe_run", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_3, &__pyx_t_8) < 0) __PYX_ERR(0, 9432, __pyx_L12_except_error)
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_3);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_3);
        __pyx_v_ve = __pyx_t_3;
        /*try:*/ {
/* … */
        /*finally:*/ {
          __pyx_L21_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_declare
            __Pyx_PyThreadState_assign
            __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 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_16); __pyx_t_16 = 0;
            __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
            __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
             __Pyx_ExceptionSwap(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25);
            if ( unlikely(__Pyx_GetException(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22) < 0)) __Pyx_ErrFetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
            __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_XGOTREF(__pyx_t_25);
            __pyx_t_13 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_19 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_ve); __pyx_v_ve = 0;
            }
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_XGIVEREF(__pyx_t_24);
            __Pyx_XGIVEREF(__pyx_t_25);
            __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_24, __pyx_t_25);
            __Pyx_XGIVEREF(__pyx_t_20);
            __Pyx_XGIVEREF(__pyx_t_21);
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_ErrRestore(__pyx_t_20, __pyx_t_21, __pyx_t_22);
            __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0;
            __pyx_lineno = __pyx_t_13; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_19;
            goto __pyx_L12_except_error;
          }
        }
      }
      goto __pyx_L12_except_error;
+09433:             raise QuestDBError(
          __pyx_t_7 = NULL;
          __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 9433, __pyx_L21_error)
          __Pyx_GOTREF(__pyx_t_14);
+09434:                 QuestDBErrorCode.InvalidTimestamp,
          __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 9434, __pyx_L21_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 9434, __pyx_L21_error)
          __Pyx_GOTREF(__pyx_t_16);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+09435:                 f'Bad argument `at`: {ve}') from ve
          __pyx_t_15 = __Pyx_PyObject_FormatSimple(__pyx_v_ve, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 9435, __pyx_L21_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_17 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_Bad_argument_at, __pyx_t_15); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 9435, __pyx_L21_error)
          __Pyx_GOTREF(__pyx_t_17);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __pyx_t_4 = 1;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(PyMethod_Check(__pyx_t_14))) {
            __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_14);
            assert(__pyx_t_7);
            PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_14);
            __Pyx_INCREF(__pyx_t_7);
            __Pyx_INCREF(__pyx__function);
            __Pyx_DECREF_SET(__pyx_t_14, __pyx__function);
            __pyx_t_4 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_16, __pyx_t_17};
            __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_14, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
            if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9433, __pyx_L21_error)
            __Pyx_GOTREF(__pyx_t_1);
          }
          __Pyx_Raise(__pyx_t_1, 0, 0, __pyx_v_ve);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __PYX_ERR(0, 9433, __pyx_L21_error)
        }
+09436:         if at_micros < 0:
    __pyx_t_2 = (__pyx_v_at_micros < 0);
    if (unlikely(__pyx_t_2)) {
/* … */
    }
+09437:             raise ValueError(
      __pyx_t_3 = NULL;
      __pyx_t_4 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Bad_argument_at_Cannot_use_a_dat};
        __pyx_t_8 = __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;
        if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9437, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
      }
      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __PYX_ERR(0, 9437, __pyx_L1_error)
 09438:                 'Bad argument `at`: Cannot use a datetime before the '
 09439:                 'Unix epoch (1970-01-01 00:00:00).')
+09440:     if not isinstance(
  __pyx_t_26 = (!__pyx_t_5);
  if (__pyx_t_26) {
  } else {
    __pyx_t_2 = __pyx_t_26;
    goto __pyx_L29_bool_binop_done;
  }
/* … */
  if (unlikely(__pyx_t_2)) {
/* … */
  }
 09441:             at,
+09442:             (str, ServerTimestampType, TimestampNanos,
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_ServerTimestampType); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9442, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
/* … */
  __pyx_t_26 = PyUnicode_Check(__pyx_v_at); 
  if (!__pyx_t_26) {
  } else {
    __pyx_t_5 = __pyx_t_26;
    goto __pyx_L31_bool_binop_done;
  }
/* … */
  __pyx_t_26 = PyObject_IsInstance(__pyx_v_at, __pyx_t_8); 
  if (!__pyx_t_26) {
  } else {
    __pyx_t_5 = __pyx_t_26;
    goto __pyx_L31_bool_binop_done;
  }
/* … */
  __pyx_t_26 = __Pyx_TypeCheck(__pyx_v_at, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos); 
  if (!__pyx_t_26) {
  } else {
    __pyx_t_5 = __pyx_t_26;
    goto __pyx_L31_bool_binop_done;
  }
+09443:              datetime.datetime)) and not (
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9443, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9443, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
  __pyx_t_26 = PyObject_IsInstance(__pyx_v_at, __pyx_t_6); 
  __pyx_t_5 = __pyx_t_26;
  __pyx_L31_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
  __pyx_t_27 = (!__pyx_t_26);
  __pyx_t_2 = __pyx_t_27;
  __pyx_L29_bool_binop_done:;
+09444:             isinstance(at, int) and not isinstance(at, bool)):
  __pyx_t_5 = PyLong_Check(__pyx_v_at); 
  if (__pyx_t_5) {
  } else {
    __pyx_t_26 = __pyx_t_5;
    goto __pyx_L35_bool_binop_done;
  }
  __pyx_t_5 = __Pyx_TypeCheck(__pyx_v_at, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); 
  __pyx_t_27 = (!__pyx_t_5);
  __pyx_t_26 = __pyx_t_27;
  __pyx_L35_bool_binop_done:;
+09445:         raise QuestDBError(
    __pyx_t_6 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9445, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
+09446:             QuestDBErrorCode.InvalidTimestamp,
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9446, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 9446, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_4 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
      assert(__pyx_t_6);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
      __pyx_t_4 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_14, __pyx_mstate_global->__pyx_kp_u_dataframe_requires_at_to_be_the};
      __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (__pyx_t_4*__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_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9445, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
    }
    __Pyx_Raise(__pyx_t_8, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __PYX_ERR(0, 9445, __pyx_L1_error)
 09447:             'dataframe() requires `at` to be the designated timestamp '
 09448:             'column (by name or index), a fixed timestamp shared by every '
 09449:             'row (TimestampNanos / datetime), or the explicit '
 09450:             '`ServerTimestamp` sentinel to let the server assign each '
 09451:             'row\'s timestamp on arrival.')
 09452:     # Once per call, ahead of the retry loop below, so a reconnect does
 09453:     # not repeat it.
+09454:     df = _dataframe_freeze_claim(df)
  __pyx_t_8 = __pyx_f_7questdb_7_client__dataframe_freeze_claim(__pyx_v_df); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9454, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF_SET(__pyx_v_df, __pyx_t_8);
  __pyx_t_8 = 0;
+09455:     _dataframe_log_claim_problems(df)
  __pyx_t_28 = __pyx_f_7questdb_7_client__dataframe_log_claim_problems(__pyx_v_df); if (unlikely(__pyx_t_28 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9455, __pyx_L1_error)
 09456:     # Ahead of the choice between the Arrow and the NumPy route, so both
 09457:     # see the same signed GEOHASH columns.
+09458:     df = _dataframe_reinterpret_unsigned_geohash(df, schema_overrides)
  __pyx_t_8 = __pyx_f_7questdb_7_client__dataframe_reinterpret_unsigned_geohash(__pyx_v_df, __pyx_v_schema_overrides); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9458, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF_SET(__pyx_v_df, __pyx_t_8);
  __pyx_t_8 = 0;
 09459:     # A zero budget (standalone from-conf source) makes a single attempt:
 09460:     # a transient failure surfaces immediately rather than re-dialling.
+09461:     deadline = time.monotonic() + reconnect_max_s
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 9461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 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[2] = {__pyx_t_3, NULL};
    __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __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;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9461, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
  }
  __pyx_t_6 = PyFloat_FromDouble(__pyx_v_reconnect_max_s); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_3 = PyNumber_Add(__pyx_t_8, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_29 = __Pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_29 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 9461, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_deadline = __pyx_t_29;
+09462:     while True:
  while (1) {
 09463:         # Reclaim string storage from a prior attempt's released plan.
+09464:         qdb_pystr_buf_clear(b)
    qdb_pystr_buf_clear(__pyx_v_b);
+09465:         src.connect_gave_up = False
    __pyx_v_src->connect_gave_up = 0;
+09466:         try:
    {
      /*try:*/ {
/* … */
      }
      __pyx_L39_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_16); __pyx_t_16 = 0;
      __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 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_L41_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_L1_error;
      __pyx_L45_try_continue:;
      __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_L37_continue;
      __pyx_L43_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_L0;
      __pyx_L40_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_L37_continue:;
  }
+09467:             if _dataframe_client_try_capsule_path(
        __pyx_t_2 = __pyx_f_7questdb_7_client__dataframe_client_try_capsule_path(__pyx_v_src, __pyx_v_budget_ms, __pyx_v_df, __pyx_v_table_name, __pyx_v_symbols, __pyx_v_at, __pyx_v_max_rows_per_batch, __pyx_v_validated_overrides, (&__pyx_v_may_have_committed_prefix), (&__pyx_v_nonreplayable_consumed)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 9467, __pyx_L39_error)
        if (__pyx_t_2) {
/* … */
        }
 09468:                     src,
 09469:                     budget_ms,
 09470:                     df,
 09471:                     table_name,
 09472:                     symbols,
 09473:                     at,
 09474:                     max_rows_per_batch,
 09475:                     validated_overrides,
 09476:                     &may_have_committed_prefix,
 09477:                     &nonreplayable_consumed):
+09478:                 return 0
          __pyx_r = 0;
          goto __pyx_L43_try_return;
+09479:             if validated_overrides is not None:
        __pyx_t_2 = (__pyx_v_validated_overrides != Py_None);
        if (unlikely(__pyx_t_2)) {
/* … */
        }
+09480:                 raise UnsupportedDataFrameShapeError(
          __pyx_t_6 = NULL;
          __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_UnsupportedDataFrameShapeError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9480, __pyx_L39_error)
          __Pyx_GOTREF(__pyx_t_8);
+09481:                     _schema_overrides_need_arrow_message(df))
          __pyx_t_14 = __pyx_f_7questdb_7_client__schema_overrides_need_arrow_message(__pyx_v_df); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 9481, __pyx_L39_error)
          __Pyx_GOTREF(__pyx_t_14);
          __pyx_t_4 = 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_4 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_14};
            __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__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_8); __pyx_t_8 = 0;
            if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9480, __pyx_L39_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(0, 9480, __pyx_L39_error)
+09482:             _dataframe_numpy_publish(
        __pyx_t_28 = __pyx_f_7questdb_7_client__dataframe_numpy_publish(__pyx_v_src, __pyx_v_budget_ms, __pyx_v_b, __pyx_v_plan, __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at, __pyx_v_max_rows_per_batch, (&__pyx_v_may_have_committed_prefix)); if (unlikely(__pyx_t_28 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9482, __pyx_L39_error)
 09483:                 src, budget_ms, b, plan, df, table_name,
 09484:                 table_name_col, symbols, at, max_rows_per_batch,
 09485:                 &may_have_committed_prefix)
+09486:             return 0
        __pyx_r = 0;
        goto __pyx_L43_try_return;
+09487:         except QuestDBError as exc:
      __Pyx_ErrFetch(&__pyx_t_3, &__pyx_t_8, &__pyx_t_14);
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9487, __pyx_L41_except_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_18 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_3, __pyx_t_6);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_ErrRestore(__pyx_t_3, __pyx_t_8, __pyx_t_14);
      __pyx_t_3 = 0; __pyx_t_8 = 0; __pyx_t_14 = 0;
      if (__pyx_t_18) {
        __Pyx_AddTraceback("questdb._client._direct_dataframe_run", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_14, &__pyx_t_8, &__pyx_t_3) < 0) __PYX_ERR(0, 9487, __pyx_L41_except_error)
        __Pyx_XGOTREF(__pyx_t_14);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_8);
        __pyx_v_exc = __pyx_t_8;
        /*try:*/ {
/* … */
        /*finally:*/ {
          /*normal exit:*/{
            __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
            goto __pyx_L55;
          }
          __pyx_L54_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_declare
            __Pyx_PyThreadState_assign
            __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_33 = 0; __pyx_t_32 = 0; __pyx_t_31 = 0;
            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
            __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;
            __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
            __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
             __Pyx_ExceptionSwap(&__pyx_t_33, &__pyx_t_32, &__pyx_t_31);
            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_33);
            __Pyx_XGOTREF(__pyx_t_32);
            __Pyx_XGOTREF(__pyx_t_31);
            __pyx_t_13 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_34 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
            }
            __Pyx_XGIVEREF(__pyx_t_33);
            __Pyx_XGIVEREF(__pyx_t_32);
            __Pyx_XGIVEREF(__pyx_t_31);
            __Pyx_ExceptionReset(__pyx_t_33, __pyx_t_32, __pyx_t_31);
            __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_33 = 0; __pyx_t_32 = 0; __pyx_t_31 = 0;
            __pyx_lineno = __pyx_t_13; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_34;
            goto __pyx_L41_except_error;
          }
          __pyx_L51_continue: {
            __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
            goto __pyx_L49_except_continue;
          }
          __pyx_L55:;
        }
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        goto __pyx_L40_exception_handled;
        __pyx_L49_except_continue:;
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        goto __pyx_L45_try_continue;
      }
      goto __pyx_L41_except_error;
 09488:             # Every exit below says `raise exc`, never a bare `raise`: a bare
 09489:             # one re-raises whatever the ENCLOSING `except` is handling, and
 09490:             # the probe's nested handler below completes normally, so CPython
 09491:             # restores the outer exception state before control reaches them.
 09492:             # A rebinding of `exc` would then steer the retry decision while
 09493:             # the caller still got the original error -- an
 09494:             # `OidcCancelledError` from a provider closed on another thread
 09495:             # (AuthError, so it fails the code check below) surfaced as the
 09496:             # original `OidcInteractionRequired`, telling the caller to run
 09497:             # `sign_in()` on a provider that is closed for good and can never
 09498:             # produce a token. `raise exc` re-raises the same object when
 09499:             # nothing was rebound, and keeps the original as `__context__`
 09500:             # when it was.
 09501:             #
 09502:             # An OIDC failure that needs a human is not a transport blip: the
 09503:             # native side classifies it as a retryable SocketError so an
 09504:             # attached transport's background drainer keeps queued frames
 09505:             # alive while someone signs in. A foreground dataframe() call has
 09506:             # no such reason to wait -- retrying re-polls a provider that is
 09507:             # documented never to prompt, so the call would stall for the whole
 09508:             # reconnect budget (300s by default) only to raise the same error.
 09509:             # Usually fail fast and let the caller run sign_in(). One immediate
 09510:             # TOKEN probe closes the race where the error was produced while a
 09511:             # peer sign-in held the lock but Python observes that lock only
 09512:             # after it has completed. Probe the provider directly rather than
 09513:             # rebuilding/re-exporting the whole dataframe just to discover the
 09514:             # same InteractionRequired result. Only a newly available token
 09515:             # justifies replaying data preparation once.
+09516:             connect_final = src.connect_gave_up
          __pyx_t_2 = __pyx_v_src->connect_gave_up;
          __pyx_v_connect_final = __pyx_t_2;
+09517:             oidc_terminal = _is_oidc_terminal_for_foreground(exc)
          __pyx_t_2 = __pyx_f_7questdb_7_client__is_oidc_terminal_for_foreground(__pyx_v_exc); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 9517, __pyx_L54_error)
          __pyx_v_oidc_terminal = __pyx_t_2;
+09518:             if oidc_terminal and not (
          if (__pyx_v_oidc_terminal) {
          } else {
            __pyx_t_2 = __pyx_v_oidc_terminal;
            goto __pyx_L57_bool_binop_done;
          }
/* … */
          __pyx_t_26 = (!__pyx_t_27);
          __pyx_t_2 = __pyx_t_26;
          __pyx_L57_bool_binop_done:;
          if (__pyx_t_2) {
/* … */
          }
+09519:                     oidc_terminal_probe_used or exc.in_doubt
          if (!__pyx_v_oidc_terminal_probe_used) {
          } else {
            __pyx_t_27 = __pyx_v_oidc_terminal_probe_used;
            goto __pyx_L59_bool_binop_done;
          }
/* … */
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_in_doubt); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9519, __pyx_L54_error)
          __Pyx_GOTREF(__pyx_t_6);
/* … */
          __pyx_t_26 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_26 < 0))) __PYX_ERR(0, 9519, __pyx_L54_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (!__pyx_t_26) {
          } else {
            __pyx_t_27 = __pyx_t_26;
            goto __pyx_L59_bool_binop_done;
          }
+09520:                     or may_have_committed_prefix or nonreplayable_consumed
          if (!__pyx_v_may_have_committed_prefix) {
          } else {
            __pyx_t_27 = __pyx_v_may_have_committed_prefix;
            goto __pyx_L59_bool_binop_done;
          }
/* … */
          if (!__pyx_v_nonreplayable_consumed) {
          } else {
            __pyx_t_27 = __pyx_v_nonreplayable_consumed;
            goto __pyx_L59_bool_binop_done;
          }
+09521:                     or oidc_auth is None):
          __pyx_t_26 = (__pyx_v_oidc_auth == Py_None);
          __pyx_t_27 = __pyx_t_26;
          __pyx_L59_bool_binop_done:;
+09522:                 oidc_terminal_probe_used = True
            __pyx_v_oidc_terminal_probe_used = 1;
+09523:                 try:
            {
              /*try:*/ {
/* … */
              }
/* … */
              __pyx_L66_except_error:;
              __Pyx_XGIVEREF(__pyx_t_25);
              __Pyx_XGIVEREF(__pyx_t_24);
              __Pyx_XGIVEREF(__pyx_t_23);
              __Pyx_ExceptionReset(__pyx_t_25, __pyx_t_24, __pyx_t_23);
              goto __pyx_L54_error;
              __pyx_L70_try_continue:;
              __Pyx_XGIVEREF(__pyx_t_25);
              __Pyx_XGIVEREF(__pyx_t_24);
              __Pyx_XGIVEREF(__pyx_t_23);
              __Pyx_ExceptionReset(__pyx_t_25, __pyx_t_24, __pyx_t_23);
              goto __pyx_L51_continue;
              __pyx_L65_exception_handled:;
              __Pyx_XGIVEREF(__pyx_t_25);
              __Pyx_XGIVEREF(__pyx_t_24);
              __Pyx_XGIVEREF(__pyx_t_23);
              __Pyx_ExceptionReset(__pyx_t_25, __pyx_t_24, __pyx_t_23);
            }
+09524:                     oidc_auth._foreground_token()
                __pyx_t_1 = __pyx_v_oidc_auth;
                __Pyx_INCREF(__pyx_t_1);
                __pyx_t_4 = 0;
                {
                  PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL};
                  __pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_foreground_token, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
                  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9524, __pyx_L64_error)
                  __Pyx_GOTREF(__pyx_t_6);
                }
                __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+09525:                 except QuestDBError as probe_exc:
              __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_1, &__pyx_t_17);
              __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 9525, __pyx_L66_except_error)
              __Pyx_GOTREF(__pyx_t_16);
              __pyx_t_18 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_6, __pyx_t_16);
              __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
              __Pyx_ErrRestore(__pyx_t_6, __pyx_t_1, __pyx_t_17);
              __pyx_t_6 = 0; __pyx_t_1 = 0; __pyx_t_17 = 0;
              if (__pyx_t_18) {
                __Pyx_AddTraceback("questdb._client._direct_dataframe_run", __pyx_clineno, __pyx_lineno, __pyx_filename);
                if (__Pyx_GetException(&__pyx_t_17, &__pyx_t_1, &__pyx_t_6) < 0) __PYX_ERR(0, 9525, __pyx_L66_except_error)
                __Pyx_XGOTREF(__pyx_t_17);
                __Pyx_XGOTREF(__pyx_t_1);
                __Pyx_XGOTREF(__pyx_t_6);
                __Pyx_INCREF(__pyx_t_1);
                __pyx_v_probe_exc = __pyx_t_1;
                /*try:*/ {
/* … */
                /*finally:*/ {
                  /*normal exit:*/{
                    __Pyx_DECREF(__pyx_v_probe_exc); __pyx_v_probe_exc = 0;
                    goto __pyx_L78;
                  }
                  __pyx_L77_error:;
                  /*exception exit:*/{
                    __Pyx_PyThreadState_declare
                    __Pyx_PyThreadState_assign
                    __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_31 = 0; __pyx_t_32 = 0; __pyx_t_33 = 0;
                    __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
                    __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
                    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
                     __Pyx_ExceptionSwap(&__pyx_t_31, &__pyx_t_32, &__pyx_t_33);
                    if ( unlikely(__Pyx_GetException(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20) < 0)) __Pyx_ErrFetch(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20);
                    __Pyx_XGOTREF(__pyx_t_22);
                    __Pyx_XGOTREF(__pyx_t_21);
                    __Pyx_XGOTREF(__pyx_t_20);
                    __Pyx_XGOTREF(__pyx_t_31);
                    __Pyx_XGOTREF(__pyx_t_32);
                    __Pyx_XGOTREF(__pyx_t_33);
                    __pyx_t_18 = __pyx_lineno; __pyx_t_13 = __pyx_clineno; __pyx_t_30 = __pyx_filename;
                    {
                      __Pyx_DECREF(__pyx_v_probe_exc); __pyx_v_probe_exc = 0;
                    }
                    __Pyx_XGIVEREF(__pyx_t_31);
                    __Pyx_XGIVEREF(__pyx_t_32);
                    __Pyx_XGIVEREF(__pyx_t_33);
                    __Pyx_ExceptionReset(__pyx_t_31, __pyx_t_32, __pyx_t_33);
                    __Pyx_XGIVEREF(__pyx_t_22);
                    __Pyx_XGIVEREF(__pyx_t_21);
                    __Pyx_XGIVEREF(__pyx_t_20);
                    __Pyx_ErrRestore(__pyx_t_22, __pyx_t_21, __pyx_t_20);
                    __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_31 = 0; __pyx_t_32 = 0; __pyx_t_33 = 0;
                    __pyx_lineno = __pyx_t_18; __pyx_clineno = __pyx_t_13; __pyx_filename = __pyx_t_30;
                    goto __pyx_L66_except_error;
                  }
                  __pyx_L78:;
                }
                __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
                __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
                goto __pyx_L65_exception_handled;
              }
              goto __pyx_L66_except_error;
+09526:                     if not _is_oidc_terminal_for_foreground(probe_exc):
                  __pyx_t_2 = __pyx_f_7questdb_7_client__is_oidc_terminal_for_foreground(__pyx_v_probe_exc); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 9526, __pyx_L77_error)
                  __pyx_t_26 = (!__pyx_t_2);
                  if (__pyx_t_26) {
/* … */
                  }
                }
 09527:                         # A different provider failure takes the checks below
 09528:                         # with its own type and structured OIDC detail: a busy
 09529:                         # refusal is retried within the budget, and any other
 09530:                         # OIDC failure is raised at once.
+09531:                         exc = probe_exc
                    __Pyx_INCREF(__pyx_v_probe_exc);
                    __Pyx_DECREF_SET(__pyx_v_exc, __pyx_v_probe_exc);
+09532:                         oidc_terminal = False
                    __pyx_v_oidc_terminal = 0;
+09533:                         connect_final = False
                    __pyx_v_connect_final = 0;
 09534:                 else:
+09535:                     budget_ms = 0
              /*else:*/ {
                __pyx_v_budget_ms = 0;
+09536:                     continue
                goto __pyx_L70_try_continue;
              }
              __pyx_L64_error:;
              __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
              __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;
              __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
              __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
 09537: 
 09538:             # Aggregate at the DataFrame boundary, including validation and
 09539:             # stream errors after earlier successful batches. The native flag
 09540:             # describes the failed flush; only this driver knows the source's
 09541:             # publication history across checkpoints and connections.
+09542:             call_in_doubt = exc.in_doubt or may_have_committed_prefix
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_in_doubt); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9542, __pyx_L54_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 9542, __pyx_L54_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (!__pyx_t_2) {
          } else {
            __pyx_t_26 = __pyx_t_2;
            goto __pyx_L84_bool_binop_done;
          }
          __pyx_t_26 = __pyx_v_may_have_committed_prefix;
          __pyx_L84_bool_binop_done:;
          __pyx_v_call_in_doubt = __pyx_t_26;
 09543: 
 09544:             # Select the one-shot guidance before the delivery-risk gate so a
 09545:             # caller sees both facts when both apply. A drained stream cannot
 09546:             # be replayed even when duplicate delivery is not in doubt.
+09547:             if nonreplayable_consumed:
          if (__pyx_v_nonreplayable_consumed) {
/* … */
          }
+09548:                 if call_in_doubt:
            if (unlikely(__pyx_v_call_in_doubt)) {
/* … */
            }
+09549:                     raise _dataframe_call_error(
              __pyx_t_6 = __pyx_f_7questdb_7_client__dataframe_call_error(__pyx_v_exc, ((PyObject*)__pyx_t_1), 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9549, __pyx_L54_error)
              __Pyx_GOTREF(__pyx_t_6);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 09550:                         exc,
+09551:                         f'{exc} A prefix of this DataFrame call may have '
              __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_v_exc, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9551, __pyx_L54_error)
              __Pyx_GOTREF(__pyx_t_6);
              __pyx_t_1 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_A_prefix_of_this_DataFrame_call); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9551, __pyx_L54_error)
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 09552:                         f'committed, and the input stream was already '
 09553:                         f'partially consumed and cannot be replayed. Create '
 09554:                         f'a fresh reader, then reconcile or deduplicate any '
 09555:                         f'already committed rows before retrying.',
+09556:                         True) from exc
              __Pyx_Raise(__pyx_t_6, 0, 0, __pyx_v_exc);
              __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
              __PYX_ERR(0, 9549, __pyx_L54_error)
 09557:                 # A fresh reader helps only with a failure that a retry
 09558:                 # can get past. Anything else -- a column the route
 09559:                 # cannot carry, an override that does not apply -- fails
 09560:                 # the same way on any reader, so it goes out unchanged.
+09561:                 if exc.code not in (
            __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9561, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_6);
/* … */
            __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 9561, __pyx_L54_error)
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            if (__pyx_t_2) {
            } else {
              __pyx_t_26 = __pyx_t_2;
              goto __pyx_L89_bool_binop_done;
            }
/* … */
            __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 9561, __pyx_L54_error)
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_t_26 = __pyx_t_2;
            __pyx_L89_bool_binop_done:;
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __pyx_t_2 = __pyx_t_26;
            if (unlikely(__pyx_t_2)) {
/* … */
            }
+09562:                         QuestDBErrorCode.FailoverRetry,
            __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9562, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_FailoverRetry); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 9562, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_17);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_t_1 = PyObject_RichCompare(__pyx_t_6, __pyx_t_17, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9561, __pyx_L54_error)
            __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+09563:                         QuestDBErrorCode.SocketError):
            __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9563, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_1);
            __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_SocketError); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 9563, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_17);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_t_1 = PyObject_RichCompare(__pyx_t_6, __pyx_t_17, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9561, __pyx_L54_error)
            __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+09564:                     raise exc
              __Pyx_Raise(__pyx_v_exc, 0, 0, 0);
              __PYX_ERR(0, 9564, __pyx_L54_error)
 09565:                 # Re-raise the original exception with an appended note rather
 09566:                 # than rebuilding it as a bare QuestDBError. Rebuilding dropped
 09567:                 # the class -- a QuestDBServerRejectionError stopped matching
 09568:                 # its own `except` -- and every field only the subclass
 09569:                 # carries. `args` is what Exception.__str__ reads, and every
 09570:                 # field lives on the instance, so mutating it preserves code,
 09571:                 # in_doubt and sender_error for free. The f-string is evaluated
 09572:                 # before the assignment, so it still interpolates the original
 09573:                 # message.
 09574:                 # An OIDC token failure reaching here is an OidcNetworkError /
 09575:                 # OidcDeviceFlowError / OidcTimeoutError (each carries a
 09576:                 # retryable code by design, so it passes the code check
 09577:                 # above); rebuilding it stopped `except OidcError` from
 09578:                 # matching and discarded .status / .retry_after / .error /
 09579:                 # .error_description -- the very attributes c_err_to_py
 09580:                 # promises are catchable.
+09581:                 exc.args = (
            if (__Pyx_PyObject_SetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_args, __pyx_t_6) < (0)) __PYX_ERR(0, 9581, __pyx_L54_error)
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+09582:                     f'{exc} The input stream was already partially '
            __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_v_exc, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9582, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_1 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_The_input_stream_was_already_pa); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9582, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9582, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_GIVEREF(__pyx_t_1);
            if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1) != (0)) __PYX_ERR(0, 9582, __pyx_L54_error);
            __pyx_t_1 = 0;
 09583:                     f'consumed and cannot be replayed; retry with a '
 09584:                     f'fresh reader.',)
+09585:                 raise exc
            __Pyx_Raise(__pyx_v_exc, 0, 0, 0);
            __PYX_ERR(0, 9585, __pyx_L54_error)
 09586: 
 09587:             # Refuse a whole-source replay once any batch in this DataFrame
 09588:             # call may have committed. If only the Python sticky guard knows
 09589:             # about that prefix, widen the exposed error as well; otherwise a
 09590:             # caller could read `in_doubt=False` and manually repeat the same
 09591:             # unsafe replay.
+09592:             if call_in_doubt:
          if (__pyx_v_call_in_doubt) {
/* … */
          }
+09593:                 if exc.in_doubt:
            __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_in_doubt); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9593, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 9593, __pyx_L54_error)
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            if (unlikely(__pyx_t_2)) {
/* … */
            }
+09594:                     raise exc
              __Pyx_Raise(__pyx_v_exc, 0, 0, 0);
              __PYX_ERR(0, 9594, __pyx_L54_error)
+09595:                 raise _dataframe_call_error(
            __pyx_t_6 = __pyx_f_7questdb_7_client__dataframe_call_error(__pyx_v_exc, ((PyObject*)__pyx_t_1), 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9595, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 09596:                     exc,
+09597:                     f'{exc} An earlier batch from this DataFrame call may '
            __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_v_exc, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9597, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_1 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_An_earlier_batch_from_this_Data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9597, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 09598:                     f'have committed; replaying the original input from row '
 09599:                     f'zero may duplicate rows.',
+09600:                     True) from exc
            __Pyx_Raise(__pyx_t_6, 0, 0, __pyx_v_exc);
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __PYX_ERR(0, 9595, __pyx_L54_error)
+09601:             if oidc_terminal:
          if (unlikely(__pyx_v_oidc_terminal)) {
/* … */
          }
+09602:                 raise exc
            __Pyx_Raise(__pyx_v_exc, 0, 0, 0);
            __PYX_ERR(0, 9602, __pyx_L54_error)
 09603:             # A transport can retain SocketError / FailoverRetry around a
 09604:             # permanent provider failure so background delivery can recover.
 09605:             # Foreground calls must honor the provider's retry classification.
+09606:             if isinstance(exc, TokenUnavailableError) and not exc.retryable:
          __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_TokenUnavailableError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9606, __pyx_L54_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_26 = PyObject_IsInstance(__pyx_v_exc, __pyx_t_6); if (unlikely(__pyx_t_26 == ((int)-1))) __PYX_ERR(0, 9606, __pyx_L54_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (__pyx_t_26) {
          } else {
            __pyx_t_2 = __pyx_t_26;
            goto __pyx_L95_bool_binop_done;
          }
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_retryable); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9606, __pyx_L54_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_26 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_26 < 0))) __PYX_ERR(0, 9606, __pyx_L54_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_27 = (!__pyx_t_26);
          __pyx_t_2 = __pyx_t_27;
          __pyx_L95_bool_binop_done:;
          if (unlikely(__pyx_t_2)) {
/* … */
          }
+09607:                 raise exc
            __Pyx_Raise(__pyx_v_exc, 0, 0, 0);
            __PYX_ERR(0, 9607, __pyx_L54_error)
 09608:             # Native foreground borrows fail fast on unclassified OIDC
 09609:             # provider failures (including Network). Do not mistake their
 09610:             # SocketError wrapper for a transport retry that consumed its
 09611:             # budget: re-entering here would busy-spin through provider backoff
 09612:             # and rebuild the dataframe on every iteration.
+09613:             oidc_errors = _oidc_errors_module_if_ready()
          __pyx_t_6 = __pyx_f_7questdb_7_client__oidc_errors_module_if_ready(); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9613, __pyx_L54_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_XDECREF_SET(__pyx_v_oidc_errors, __pyx_t_6);
          __pyx_t_6 = 0;
+09614:             if (oidc_errors is not None
          __pyx_t_27 = (__pyx_v_oidc_errors != Py_None);
          if (__pyx_t_27) {
          } else {
            __pyx_t_2 = __pyx_t_27;
            goto __pyx_L98_bool_binop_done;
          }
/* … */
          if (unlikely(__pyx_t_2)) {
/* … */
          }
+09615:                     and isinstance(exc, oidc_errors.OidcError)
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_oidc_errors, __pyx_mstate_global->__pyx_n_u_OidcError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9615, __pyx_L54_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_27 = PyObject_IsInstance(__pyx_v_exc, __pyx_t_6); if (unlikely(__pyx_t_27 == ((int)-1))) __PYX_ERR(0, 9615, __pyx_L54_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (__pyx_t_27) {
          } else {
            __pyx_t_2 = __pyx_t_27;
            goto __pyx_L98_bool_binop_done;
          }
+09616:                     and not bool(getattr(exc, '_acquisition_busy', False))):
          __pyx_t_1 = NULL;
          __pyx_t_17 = __Pyx_GetAttr3(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_acquisition_busy_2, Py_False); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 9616, __pyx_L54_error)
          __Pyx_GOTREF(__pyx_t_17);
          __pyx_t_4 = 1;
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_17};
            __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
            if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9616, __pyx_L54_error)
            __Pyx_GOTREF((PyObject *)__pyx_t_6);
          }
          __pyx_t_27 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_t_6)); if (unlikely((__pyx_t_27 < 0))) __PYX_ERR(0, 9616, __pyx_L54_error)
          __Pyx_DECREF((PyObject *)__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_26 = (!__pyx_t_27);
          __pyx_t_2 = __pyx_t_26;
          __pyx_L98_bool_binop_done:;
+09617:                 raise exc
            __Pyx_Raise(__pyx_v_exc, 0, 0, 0);
            __PYX_ERR(0, 9617, __pyx_L54_error)
 09618:             # Delivery status and retryability are independent. A local
 09619:             # validation error still requires the caller to correct its input.
 09620:             # FailoverRetry = transient flush/sync; SocketError = a
 09621:             # re-borrow that has not reached a live primary yet. A *busy*
 09622:             # OIDC refusal is transient whatever its code: it clears as soon
 09623:             # as the peer sign-in finishes, and must wait behind it as the gate
 09624:             # above promises. Native reports it as SocketError today; keying on
 09625:             # the busy flag as well keeps that promise independent of the
 09626:             # code.
+09627:             if exc.code not in (
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9627, __pyx_L54_error)
          __Pyx_GOTREF(__pyx_t_6);
/* … */
          __pyx_t_27 = __Pyx_PyObject_IsTrue(__pyx_t_17); if (unlikely((__pyx_t_27 < 0))) __PYX_ERR(0, 9627, __pyx_L54_error)
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          if (__pyx_t_27) {
          } else {
            __pyx_t_26 = __pyx_t_27;
            goto __pyx_L104_bool_binop_done;
          }
/* … */
          __pyx_t_27 = __Pyx_PyObject_IsTrue(__pyx_t_17); if (unlikely((__pyx_t_27 < 0))) __PYX_ERR(0, 9627, __pyx_L54_error)
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __pyx_t_26 = __pyx_t_27;
          __pyx_L104_bool_binop_done:;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_27 = __pyx_t_26;
          if (__pyx_t_27) {
          } else {
            __pyx_t_2 = __pyx_t_27;
            goto __pyx_L102_bool_binop_done;
          }
/* … */
          if (unlikely(__pyx_t_2)) {
/* … */
          }
+09628:                     QuestDBErrorCode.FailoverRetry,
          __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 9628, __pyx_L54_error)
          __Pyx_GOTREF(__pyx_t_17);
          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_FailoverRetry); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9628, __pyx_L54_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __pyx_t_17 = PyObject_RichCompare(__pyx_t_6, __pyx_t_1, Py_NE); __Pyx_XGOTREF(__pyx_t_17); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 9627, __pyx_L54_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+09629:                     QuestDBErrorCode.SocketError) and not bool(
          __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 9629, __pyx_L54_error)
          __Pyx_GOTREF(__pyx_t_17);
          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_SocketError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9629, __pyx_L54_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __pyx_t_17 = PyObject_RichCompare(__pyx_t_6, __pyx_t_1, Py_NE); __Pyx_XGOTREF(__pyx_t_17); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 9627, __pyx_L54_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
          __pyx_t_17 = NULL;
/* … */
          __pyx_t_27 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_t_6)); if (unlikely((__pyx_t_27 < 0))) __PYX_ERR(0, 9629, __pyx_L54_error)
          __Pyx_DECREF((PyObject *)__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_26 = (!__pyx_t_27);
          __pyx_t_2 = __pyx_t_26;
          __pyx_L102_bool_binop_done:;
+09630:                         getattr(exc, '_acquisition_busy', False)):
          __pyx_t_1 = __Pyx_GetAttr3(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_acquisition_busy_2, Py_False); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9630, __pyx_L54_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_4 = 1;
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_17, __pyx_t_1};
            __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9629, __pyx_L54_error)
            __Pyx_GOTREF((PyObject *)__pyx_t_6);
          }
+09631:                 raise exc
            __Pyx_Raise(__pyx_v_exc, 0, 0, 0);
            __PYX_ERR(0, 9631, __pyx_L54_error)
 09632:             # The connect already had the rest of the budget: native spent it,
 09633:             # or stopped early on a failure it does not retry for a caller that
 09634:             # waits (a token provider returning an empty token, say). Borrowing
 09635:             # again would repeat that in a tight loop until the deadline.
+09636:             if connect_final:
          if (unlikely(__pyx_v_connect_final)) {
/* … */
          }
+09637:                 raise exc
            __Pyx_Raise(__pyx_v_exc, 0, 0, 0);
            __PYX_ERR(0, 9637, __pyx_L54_error)
+09638:             remaining = deadline - time.monotonic()
          __pyx_t_6 = PyFloat_FromDouble(__pyx_v_deadline); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9638, __pyx_L54_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_17 = NULL;
          __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 9638, __pyx_L54_error)
          __Pyx_GOTREF(__pyx_t_16);
          __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 9638, __pyx_L54_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          __pyx_t_4 = 1;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(PyMethod_Check(__pyx_t_7))) {
            __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_7);
            assert(__pyx_t_17);
            PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
            __Pyx_INCREF(__pyx_t_17);
            __Pyx_INCREF(__pyx__function);
            __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
            __pyx_t_4 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_17, NULL};
            __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
            if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9638, __pyx_L54_error)
            __Pyx_GOTREF(__pyx_t_1);
          }
          __pyx_t_7 = PyNumber_Subtract(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 9638, __pyx_L54_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_29 = __Pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_29 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 9638, __pyx_L54_error)
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_v_remaining = __pyx_t_29;
+09639:             if remaining <= 0.0:
          __pyx_t_2 = (__pyx_v_remaining <= 0.0);
          if (unlikely(__pyx_t_2)) {
/* … */
          }
+09640:                 raise exc
            __Pyx_Raise(__pyx_v_exc, 0, 0, 0);
            __PYX_ERR(0, 9640, __pyx_L54_error)
 09641:             # The whole remaining budget goes to the next attempt's connect.
 09642:             # With a provider attached, `_direct_conn_open_checked` slices it
 09643:             # so the terminal-OIDC gate still fails fast, without cutting the
 09644:             # retry of any other failure short.
+09645:             budget_ms = <uint64_t>(remaining * 1000.0)
          __pyx_v_budget_ms = ((uint64_t)(__pyx_v_remaining * 1000.0));
        }
 09646: 
 09647: 
+09648: cdef void_int _capsule_consume_stream_with_hint(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__capsule_consume_stream_with_hint(struct qwp_direct_sender *__pyx_v_conn, PyObject *__pyx_v_stream_owner, struct line_sender_table_name __pyx_v_c_table_name, struct line_sender_column_name *__pyx_v_c_ts_column_ptr, int __pyx_v_at_scalar_set, int64_t __pyx_v_at_scalar_nanos, struct ArrowSchema *__pyx_v_c_schema, struct qwp_arrow_override const *__pyx_v_c_overrides, size_t __pyx_v_c_overrides_len, int *__pyx_v_any_flushed, size_t *__pyx_v_deferred_since_sync, int *__pyx_v_may_have_committed_prefix, size_t __pyx_v_max_rows_per_batch, int __pyx_v_can_slice, PyObject *__pyx_v_binary_names, PyObject *__pyx_v_unlabelled) {
  PyObject *__pyx_v_hint = 0;
  PyObject *__pyx_v_exc = NULL;
  __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_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(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_AddTraceback("questdb._client._capsule_consume_stream_with_hint", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_hint);
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 09649:         qwp_direct_sender* conn,
 09650:         object stream_owner,
 09651:         line_sender_table_name c_table_name,
 09652:         line_sender_column_name* c_ts_column_ptr,
 09653:         bint at_scalar_set,
 09654:         int64_t at_scalar_nanos,
 09655:         ArrowSchema* c_schema,
 09656:         const qwp_arrow_override* c_overrides,
 09657:         size_t c_overrides_len,
 09658:         bint* any_flushed,
 09659:         size_t* deferred_since_sync,
 09660:         bint* may_have_committed_prefix,
 09661:         size_t max_rows_per_batch,
 09662:         bint can_slice,
 09663:         object binary_names,
 09664:         object unlabelled) except -1:
 09665:     cdef str hint
+09666:     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_L8_try_end:;
  }
+09667:         _capsule_consume_stream(
      __pyx_t_4 = __pyx_f_7questdb_7_client__capsule_consume_stream(__pyx_v_conn, __pyx_v_stream_owner, __pyx_v_c_table_name, __pyx_v_c_ts_column_ptr, __pyx_v_at_scalar_set, __pyx_v_at_scalar_nanos, __pyx_v_c_schema, __pyx_v_c_overrides, __pyx_v_c_overrides_len, __pyx_v_any_flushed, __pyx_v_deferred_since_sync, __pyx_v_may_have_committed_prefix, __pyx_v_binary_names, __pyx_v_unlabelled); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9667, __pyx_L3_error)
 09668:             conn, stream_owner, c_table_name, c_ts_column_ptr,
 09669:             at_scalar_set, at_scalar_nanos, c_schema,
 09670:             c_overrides, c_overrides_len, any_flushed,
 09671:             deferred_since_sync, may_have_committed_prefix,
 09672:             binary_names, unlabelled)
+09673:     except QuestDBError as exc:
    __Pyx_ErrFetch(&__pyx_t_5, &__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(0, 9673, __pyx_L5_except_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_5, __pyx_t_8);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_ErrRestore(__pyx_t_5, __pyx_t_6, __pyx_t_7);
    __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0;
    if (__pyx_t_9) {
      __Pyx_AddTraceback("questdb._client._capsule_consume_stream_with_hint", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5) < 0) __PYX_ERR(0, 9673, __pyx_L5_except_error)
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_v_exc = __pyx_t_6;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L14_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 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_15); __pyx_t_15 = 0;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
           __Pyx_ExceptionSwap(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25);
          if ( unlikely(__Pyx_GetException(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22) < 0)) __Pyx_ErrFetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
          __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_XGOTREF(__pyx_t_25);
          __pyx_t_9 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_19 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
          }
          __Pyx_XGIVEREF(__pyx_t_23);
          __Pyx_XGIVEREF(__pyx_t_24);
          __Pyx_XGIVEREF(__pyx_t_25);
          __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_24, __pyx_t_25);
          __Pyx_XGIVEREF(__pyx_t_20);
          __Pyx_XGIVEREF(__pyx_t_21);
          __Pyx_XGIVEREF(__pyx_t_22);
          __Pyx_ErrRestore(__pyx_t_20, __pyx_t_21, __pyx_t_22);
          __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0;
          __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_19;
          goto __pyx_L5_except_error;
        }
      }
    }
    goto __pyx_L5_except_error;
+09674:         if _is_batch_too_large_error(exc):
        __pyx_t_10 = __pyx_f_7questdb_7_client__is_batch_too_large_error(__pyx_v_exc); if (unlikely(__pyx_t_10 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 9674, __pyx_L14_error)
        if (__pyx_t_10) {
/* … */
        }
+09675:             if exc.code == QuestDBErrorCode.BatchTooLarge:
          __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9675, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 9675, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_BatchTooLarge); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 9675, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __pyx_t_11 = PyObject_RichCompare(__pyx_t_8, __pyx_t_12, Py_EQ); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 9675, __pyx_L14_error)
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 9675, __pyx_L14_error)
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          if (__pyx_t_10) {
/* … */
            goto __pyx_L17;
          }
 09676:                 # The core already split the chunk as far as it can: a single
 09677:                 # row (table schema plus one row's values) still exceeds the
 09678:                 # server's per-batch cap, so a smaller batch cannot help.
 09679:                 hint = (
+09680:                     'a single row exceeds the server per-batch cap '
            __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_a_single_row_exceeds_the_server);
            __pyx_v_hint = __pyx_mstate_global->__pyx_kp_u_a_single_row_exceeds_the_server;
 09681:                     '(max_buf_size / the server X-QWP-Max-Batch-Size); reduce '
 09682:                     'the size of individual values or raise the cap. '
 09683:                     '`max_rows_per_batch` does not bound a single row.')
+09684:             elif can_slice:
          if (__pyx_v_can_slice) {
/* … */
            goto __pyx_L17;
          }
 09685:                 hint = (
+09686:                     f'reduce `max_rows_per_batch` (current: '
            __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_13, 3, 38 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_11) + 12, 127);
            if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 9686, __pyx_L14_error)
            __Pyx_GOTREF(__pyx_t_12);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            __pyx_v_hint = ((PyObject*)__pyx_t_12);
            __pyx_t_12 = 0;
+09687:                     f'{max_rows_per_batch}) and retry.')
            __pyx_t_11 = __Pyx_PyUnicode_From_size_t(__pyx_v_max_rows_per_batch, 0, ' ', 'd'); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 9687, __pyx_L14_error)
            __Pyx_GOTREF(__pyx_t_11);
            __pyx_t_13[0] = __pyx_mstate_global->__pyx_kp_u_reduce_max_rows_per_batch_curren;
            __pyx_t_13[1] = __pyx_t_11;
            __pyx_t_13[2] = __pyx_mstate_global->__pyx_kp_u_and_retry;
 09688:             else:
 09689:                 hint = (
+09690:                     f'this is a streaming Arrow source (e.g. '
          /*else*/ {
/* … */
            __pyx_t_11 = __Pyx_PyUnicode_Join(__pyx_t_13, 3, 131 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12) + 124, 127);
            if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 9690, __pyx_L14_error)
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
            __pyx_v_hint = ((PyObject*)__pyx_t_11);
            __pyx_t_11 = 0;
          }
          __pyx_L17:;
 09691:                     f'pa.RecordBatchReader); batch size is set by the '
 09692:                     f'producer and `max_rows_per_batch` (current: '
+09693:                     f'{max_rows_per_batch}) does not bound it. '
            __pyx_t_12 = __Pyx_PyUnicode_From_size_t(__pyx_v_max_rows_per_batch, 0, ' ', 'd'); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 9693, __pyx_L14_error)
            __Pyx_GOTREF(__pyx_t_12);
            __pyx_t_13[0] = __pyx_mstate_global->__pyx_kp_u_this_is_a_streaming_Arrow_source;
            __pyx_t_13[1] = __pyx_t_12;
            __pyx_t_13[2] = __pyx_mstate_global->__pyx_kp_u_does_not_bound_it_Materialise_t;
 09694:                     f'Materialise to a `pa.Table` '
 09695:                     f'(`pa.Table.from_batches(reader)`) or re-batch '
 09696:                     f'at the source before passing.')
+09697:             raise QuestDBError(
          __pyx_t_12 = NULL;
          __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9697, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_8);
+09698:                 exc.code, f'{exc}\nHint: {hint}') from exc
          __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 9698, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_14);
          __pyx_t_15 = __Pyx_PyObject_FormatSimple(__pyx_v_exc, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 9698, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_13[0] = __pyx_t_15;
          __pyx_t_13[1] = __pyx_mstate_global->__pyx_kp_u_Hint;
          __pyx_t_13[2] = __pyx_v_hint;
          __pyx_t_16 = __Pyx_PyUnicode_Join(__pyx_t_13, 3, __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15) + 7 + __Pyx_PyUnicode_GET_LENGTH(__pyx_v_hint), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_15) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_v_hint));
          if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 9698, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_16);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __pyx_t_17 = 1;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(PyMethod_Check(__pyx_t_8))) {
            __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_8);
            assert(__pyx_t_12);
            PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
            __Pyx_INCREF(__pyx_t_12);
            __Pyx_INCREF(__pyx__function);
            __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
            __pyx_t_17 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_12, __pyx_t_14, __pyx_t_16};
            __pyx_t_11 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_17, (3-__pyx_t_17) | (__pyx_t_17*__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_16); __pyx_t_16 = 0;
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 9697, __pyx_L14_error)
            __Pyx_GOTREF(__pyx_t_11);
          }
          __Pyx_Raise(__pyx_t_11, 0, 0, __pyx_v_exc);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __PYX_ERR(0, 9697, __pyx_L14_error)
+09699:         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(0, 9699, __pyx_L14_error)
      }
 09700: 
 09701: 
+09702: cdef bint _is_batch_too_large_error(object exc):
static int __pyx_f_7questdb_7_client__is_batch_too_large_error(PyObject *__pyx_v_exc) {
  PyObject *__pyx_v_msg = 0;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb._client._is_batch_too_large_error", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_msg);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 09703:     cdef str msg
+09704:     if not isinstance(exc, QuestDBError):
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9704, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_exc, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 9704, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (!__pyx_t_2);
  if (__pyx_t_3) {
/* … */
  }
+09705:         return False
    __pyx_r = 0;
    goto __pyx_L0;
+09706:     if exc.code == QuestDBErrorCode.BatchTooLarge:
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9706, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 9706, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_BatchTooLarge); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 9706, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_1, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 9706, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 9706, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__pyx_t_3) {
/* … */
  }
+09707:         return True
    __pyx_r = 1;
    goto __pyx_L0;
 09708:     # Fallback for encoder-level "too large" errors that carry no dedicated
 09709:     # code (MAX_CHUNK_ROWS row-count overflow, an oversize single value).
+09710:     msg = str(exc).lower()
  __pyx_t_1 = __Pyx_PyObject_Unicode(__pyx_v_exc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __pyx_t_1;
  __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_lower, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 9710, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_v_msg = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
 09711:     return (
+09712:         ('row_count' in msg and ('exceeds' in msg or 'too large' in msg))
  __pyx_t_2 = (__Pyx_PyUnicode_ContainsTF(__pyx_mstate_global->__pyx_n_u_row_count, __pyx_v_msg, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 9712, __pyx_L1_error)
  if (!__pyx_t_2) {
    goto __pyx_L6_next_or;
  } else {
  }
  __pyx_t_2 = (__Pyx_PyUnicode_ContainsTF(__pyx_mstate_global->__pyx_n_u_exceeds, __pyx_v_msg, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 9712, __pyx_L1_error)
  if (!__pyx_t_2) {
  } else {
    __pyx_t_3 = __pyx_t_2;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_2 = (__Pyx_PyUnicode_ContainsTF(__pyx_mstate_global->__pyx_kp_u_too_large, __pyx_v_msg, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 9712, __pyx_L1_error)
  if (!__pyx_t_2) {
  } else {
    __pyx_t_3 = __pyx_t_2;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_L6_next_or:;
+09713:         or 'batch too large' in msg)
  __pyx_t_2 = (__Pyx_PyUnicode_ContainsTF(__pyx_mstate_global->__pyx_kp_u_batch_too_large, __pyx_v_msg, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 9713, __pyx_L1_error)
  __pyx_t_3 = __pyx_t_2;
  __pyx_L5_bool_binop_done:;
  __pyx_r = __pyx_t_3;
  goto __pyx_L0;
 09714: 
 09715: 
 09716: # no_gc_clear keeps tp_clear from nulling fields the native dispatchers
 09717: # still target. The callback targets are additionally pinned in
 09718: # _LIVE_CALLBACK_REFS until the dispatchers are joined, so the cycle collector
 09719: # cannot clear a live handler even when the handle is reached only through it.
+09720: @cython.no_gc_clear
struct __pyx_vtabstruct_7questdb_7_client_QuestDB {
  struct questdb_db *(*_begin_db_use)(struct __pyx_obj_7questdb_7_client_QuestDB *, PyObject *, struct __pyx_opt_args_7questdb_7_client_7QuestDB__begin_db_use *__pyx_optional_args);
  uintptr_t (*_scoped_call_depth)(struct __pyx_obj_7questdb_7_client_QuestDB *);
  void (*_enter_scoped_call)(struct __pyx_obj_7questdb_7_client_QuestDB *);
  void (*_exit_scoped_call)(struct __pyx_obj_7questdb_7_client_QuestDB *);
  void (*_end_db_use)(struct __pyx_obj_7questdb_7_client_QuestDB *, struct __pyx_opt_args_7questdb_7_client_7QuestDB__end_db_use *__pyx_optional_args);
  PyObject *(*close)(struct __pyx_obj_7questdb_7_client_QuestDB *, int __pyx_skip_dispatch, struct __pyx_opt_args_7questdb_7_client_7QuestDB_close *__pyx_optional_args);
};
static struct __pyx_vtabstruct_7questdb_7_client_QuestDB *__pyx_vtabptr_7questdb_7_client_QuestDB;

 09721: cdef class QuestDB:
 09722:     """
 09723:     Handle to a QuestDB deployment over QWP/WebSocket.
 09724: 
 09725:     Owns the connection pool; lends row-building senders via
 09726:     :meth:`sender`, bulk-loads DataFrames via :meth:`dataframe`, runs
 09727:     queries via :meth:`query`, and lends reader leases via
 09728:     :meth:`reader`. Construct with :func:`questdb.connect`.
 09729:     Instances are safe to share across threads.
 09730:     """
 09731:     cdef questdb_db* _db
 09732:     cdef object _conf_str
 09733:     cdef object _state_cond
 09734:     cdef size_t _lease_uses
 09735:     cdef size_t _call_uses
 09736:     cdef bint _closing
 09737:     cdef bint _close_running
 09738:     cdef object _close_deadline
 09739:     cdef object _thread_owner_token
 09740:     cdef object _dispatch_context
 09741:     cdef object _connection_listener
 09742:     cdef object _error_handler
 09743:     cdef object _oidc_auth
 09744:     # Store _bearer_token_provider in __dict__ so PyPy can collect a
 09745:     # provider that owns this client; cpyext object fields hide that cycle.
 09746:     # `__setattr__` keeps every other name out of it.
 09747:     cdef dict __dict__
 09748:     cdef size_t _cb_refs_key
 09749:     cdef auto_flush_mode_t _auto_flush_mode
 09750:     cdef bint _auto_flush_bytes_dynamic
 09751: 
+09752:     def __setattr__(self, name, value):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_7QuestDB_1__setattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_7questdb_7_client_7QuestDB_1__setattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setattr__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB___setattr__(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self), ((PyObject *)__pyx_v_name), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_7questdb_7_client_7QuestDB___setattr__(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client.QuestDB.__setattr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+09753:         _setattr_without_dict(self, QuestDB, _DICT_ONLY_ATTRS, name, value)
  __pyx_t_1 = __pyx_v_7questdb_7_client__DICT_ONLY_ATTRS;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_7questdb_7_client__setattr_without_dict(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, ((PyObject*)__pyx_t_1), __pyx_v_name, __pyx_v_value); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 9753, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 09754: 
+09755:     def __cinit__(self):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_7QuestDB_3__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7questdb_7_client_7QuestDB_3__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_7QuestDB_2__cinit__(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self));

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

static int __pyx_pf_7questdb_7_client_7QuestDB_2__cinit__(struct __pyx_obj_7questdb_7_client_QuestDB *__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_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("questdb._client.QuestDB.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+09756:         self._db = NULL
  __pyx_v_self->_db = NULL;
+09757:         self._conf_str = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_conf_str);
  __Pyx_DECREF(__pyx_v_self->_conf_str);
  __pyx_v_self->_conf_str = Py_None;
+09758:         self._state_cond = threading.Condition(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(0, 9758, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Condition); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 9758, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_threading); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9758, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_RLock); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 9758, __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_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_3 = __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_3)) __PYX_ERR(0, 9758, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_t_8 = 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_8 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 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(0, 9758, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_state_cond);
  __Pyx_DECREF(__pyx_v_self->_state_cond);
  __pyx_v_self->_state_cond = __pyx_t_1;
  __pyx_t_1 = 0;
+09759:         self._lease_uses = 0
  __pyx_v_self->_lease_uses = 0;
+09760:         self._call_uses = 0
  __pyx_v_self->_call_uses = 0;
+09761:         self._closing = False
  __pyx_v_self->_closing = 0;
+09762:         self._close_running = False
  __pyx_v_self->_close_running = 0;
+09763:         self._close_deadline = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_close_deadline);
  __Pyx_DECREF(__pyx_v_self->_close_deadline);
  __pyx_v_self->_close_deadline = Py_None;
 09764:         # This exact owner token indexes the handle's entry in the
 09765:         # per-OS-thread table of scoped call and callback-dispatch
 09766:         # depths. The table is shared by every handle, so a handle keeps
 09767:         # its own identity per thread without allocating an OS TLS key
 09768:         # of its own.
+09769:         self._thread_owner_token = object()
  __pyx_t_4 = NULL;
  __pyx_t_8 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_object, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9769, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_thread_owner_token);
  __Pyx_DECREF(__pyx_v_self->_thread_owner_token);
  __pyx_v_self->_thread_owner_token = __pyx_t_1;
  __pyx_t_1 = 0;
+09770:         self._dispatch_context = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_dispatch_context);
  __Pyx_DECREF(__pyx_v_self->_dispatch_context);
  __pyx_v_self->_dispatch_context = Py_None;
+09771:         self._connection_listener = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_connection_listener);
  __Pyx_DECREF(__pyx_v_self->_connection_listener);
  __pyx_v_self->_connection_listener = Py_None;
+09772:         self._error_handler = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_error_handler);
  __Pyx_DECREF(__pyx_v_self->_error_handler);
  __pyx_v_self->_error_handler = Py_None;
+09773:         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;
+09774:         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(0, 9774, __pyx_L1_error)
+09775:         self._cb_refs_key = 0
  __pyx_v_self->_cb_refs_key = 0;
+09776:         self._auto_flush_mode.enabled = False
  __pyx_v_self->_auto_flush_mode.enabled = 0;
+09777:         self._auto_flush_mode.interval = -1
  __pyx_v_self->_auto_flush_mode.interval = -1L;
+09778:         self._auto_flush_mode.row_count = -1
  __pyx_v_self->_auto_flush_mode.row_count = -1L;
+09779:         self._auto_flush_mode.byte_count = -1
  __pyx_v_self->_auto_flush_mode.byte_count = -1L;
+09780:         self._auto_flush_bytes_dynamic = False
  __pyx_v_self->_auto_flush_bytes_dynamic = 0;
 09781: 
+09782:     cdef questdb_db* _begin_db_use(
static struct questdb_db *__pyx_f_7questdb_7_client_7QuestDB__begin_db_use(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self, PyObject *__pyx_v_method, struct __pyx_opt_args_7questdb_7_client_7QuestDB__begin_db_use *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("questdb._client.QuestDB._begin_db_use", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_7questdb_7_client_7QuestDB__begin_db_use {
  int __pyx_n;
  int scoped;
};
+09783:             self, str method, bint scoped=True) except? NULL:
  int __pyx_v_scoped = ((int)1);
  struct questdb_db *__pyx_v_db;
  struct questdb_db *__pyx_r;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_scoped = __pyx_optional_args->scoped;
    }
  }
+09784:         cdef questdb_db* db = NULL
  __pyx_v_db = NULL;
+09785:         self._state_cond.acquire()
  __pyx_t_2 = __pyx_v_self->_state_cond;
  __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_acquire, __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(0, 9785, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+09786:         try:
  /*try:*/ {
+09787:             db = self._db
    __pyx_t_4 = __pyx_v_self->_db;
    __pyx_v_db = __pyx_t_4;
+09788:             if db == NULL:
    __pyx_t_5 = (__pyx_v_db == NULL);
    if (unlikely(__pyx_t_5)) {
/* … */
    }
+09789:                 raise QuestDBError(
      __pyx_t_2 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9789, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_6);
+09790:                     QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 9790, __pyx_L4_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(0, 9790, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+09791:                     f"{method}() can't be called: QuestDB is closed.")
      __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 9791, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_9 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_QuestDB_is_clos); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 9791, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_3 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
        assert(__pyx_t_2);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
        __pyx_t_3 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_8, __pyx_t_9};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __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_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_1)) __PYX_ERR(0, 9789, __pyx_L4_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(0, 9789, __pyx_L4_error)
+09792:             if self._closing:
    if (unlikely(__pyx_v_self->_closing)) {
/* … */
    }
 09793:                 # Closing is one-way, so this refusal is permanent:
 09794:                 # the handle never goes back to taking new work.
+09795:                 raise QuestDBError(
      __pyx_t_6 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 9795, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_9);
+09796:                     QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9796, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9796, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+09797:                     f"{method}() can't be called: QuestDB is closing. "
      __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9797, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_8, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_QuestDB_is_clos_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 9797, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_3 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_9);
        assert(__pyx_t_6);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_9, __pyx__function);
        __pyx_t_3 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_2, __pyx_t_7};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 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(0, 9795, __pyx_L4_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(0, 9795, __pyx_L4_error)
 09798:                     'close() has been called, and the handle takes no '
 09799:                     'new work while calls in progress and outstanding '
 09800:                     'leases finish.')
 09801:             # A scoped use begins and ends inside one call on one
 09802:             # thread, so it can also be counted per thread and let
 09803:             # `close()` tell a caller waiting on other threads from one
 09804:             # waiting on itself. A lease is not scoped: it is handed
 09805:             # out here and may be returned from anywhere, so counting
 09806:             # it per thread would leave the borrower's count standing
 09807:             # and the returner's below zero. The two kinds are counted
 09808:             # apart because `close()` limits its wait for each
 09809:             # differently and says which it is waiting for: a call ends
 09810:             # when its work does, a lease only when its holder closes
 09811:             # it.
+09812:             if scoped:
    if (__pyx_v_scoped) {
/* … */
      goto __pyx_L8;
    }
+09813:                 self._enter_scoped_call()
      ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_enter_scoped_call(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 9813, __pyx_L4_error)
 09814:                 # The first scoped call on a thread allocates its call
 09815:                 # table, and on CPython 3.10/3.11 and PyPy an allocation
 09816:                 # can run a garbage-collection pass right here. A
 09817:                 # finalizer it runs can close this handle on this
 09818:                 # thread, since the lock is reentrant, and that close
 09819:                 # sees no use yet and frees the pool. The pointer read
 09820:                 # above is only good if the handle is still open now.
+09821:                 if self._db == NULL or self._closing:
      __pyx_t_10 = (__pyx_v_self->_db == NULL);
      if (!__pyx_t_10) {
      } else {
        __pyx_t_5 = __pyx_t_10;
        goto __pyx_L10_bool_binop_done;
      }
      __pyx_t_5 = __pyx_v_self->_closing;
      __pyx_L10_bool_binop_done:;
      if (unlikely(__pyx_t_5)) {
/* … */
      }
+09822:                     self._exit_scoped_call()
        ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_exit_scoped_call(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 9822, __pyx_L4_error)
+09823:                     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(0, 9823, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_7);
+09824:                         QuestDBErrorCode.InvalidApiCall,
        __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9824, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 9824, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+09825:                         f"{method}() can't be called: QuestDB was "
        __pyx_t_2 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9825, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_8 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_QuestDB_was_clo); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 9825, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_3 = 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_3 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_9, __pyx_t_6, __pyx_t_8};
          __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 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(0, 9823, __pyx_L4_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(0, 9823, __pyx_L4_error)
 09826:                         'closed while the call was starting.')
+09827:                 self._call_uses += 1
      __pyx_v_self->_call_uses = (__pyx_v_self->_call_uses + 1);
 09828:             else:
+09829:                 self._lease_uses += 1
    /*else*/ {
      __pyx_v_self->_lease_uses = (__pyx_v_self->_lease_uses + 1);
    }
    __pyx_L8:;
+09830:             return db
    __pyx_r = __pyx_v_db;
    goto __pyx_L3_return;
  }
 09831:         finally:
+09832:             self._state_cond.release()
  /*finally:*/ {
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 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_17, &__pyx_t_18, &__pyx_t_19);
      if ( unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
      __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_XGOTREF(__pyx_t_19);
      __pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
      {
        __pyx_t_7 = __pyx_v_self->_state_cond;
        __Pyx_INCREF(__pyx_t_7);
        __pyx_t_3 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
          __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9832, __pyx_L13_error)
          __Pyx_GOTREF(__pyx_t_1);
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __Pyx_XGIVEREF(__pyx_t_17);
      __Pyx_XGIVEREF(__pyx_t_18);
      __Pyx_XGIVEREF(__pyx_t_19);
      __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
      __Pyx_XGIVEREF(__pyx_t_14);
      __Pyx_XGIVEREF(__pyx_t_15);
      __Pyx_XGIVEREF(__pyx_t_16);
      __Pyx_ErrRestore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
      __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
      __pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
      goto __pyx_L1_error;
      __pyx_L13_error:;
      __Pyx_XGIVEREF(__pyx_t_17);
      __Pyx_XGIVEREF(__pyx_t_18);
      __Pyx_XGIVEREF(__pyx_t_19);
      __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
      __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L3_return: {
      __pyx_t_4 = __pyx_r;
      __pyx_t_7 = __pyx_v_self->_state_cond;
      __Pyx_INCREF(__pyx_t_7);
      __pyx_t_3 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
        __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9832, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_r = __pyx_t_4;
      goto __pyx_L0;
    }
  }
 09833: 
+09834:     cdef uintptr_t _scoped_call_depth(self) except? <uintptr_t>-1:
static uintptr_t __pyx_f_7questdb_7_client_7QuestDB__scoped_call_depth(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
  uintptr_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client.QuestDB._scoped_call_depth", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = ((uintptr_t)-1L);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 09835:         """This handle's call depth on the current OS thread."""
+09836:         return _scoped_depth_for(self._thread_owner_token)
  __pyx_t_1 = __pyx_v_self->_thread_owner_token;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_7questdb_7_client__scoped_depth_for(__pyx_t_1); if (unlikely(__pyx_t_2 == ((uintptr_t)((uintptr_t)-1L)) && PyErr_Occurred())) __PYX_ERR(0, 9836, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;
 09837: 
+09838:     cdef void _enter_scoped_call(self) except *:
static void __pyx_f_7questdb_7_client_7QuestDB__enter_scoped_call(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client.QuestDB._enter_scoped_call", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}
 09839:         """Count a call that borrows nothing but runs on this handle.
 09840: 
 09841:         A lease's own methods are scoped in exactly the sense
 09842:         `_begin_db_use` means: the call begins and ends inside one frame
 09843:         on one thread. Counting them here is what lets `close()` tell a
 09844:         caller waiting on other threads from one waiting on the very
 09845:         frame that would release the lease it is waiting for.
 09846: 
 09847:         `_lease_uses` is deliberately untouched: the lease already
 09848:         holds one for its whole lifetime, and it may be released from a
 09849:         different thread than the one that borrowed it.
 09850:         """
+09851:         _enter_scoped_for(self._thread_owner_token)
  __pyx_t_1 = __pyx_v_self->_thread_owner_token;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_f_7questdb_7_client__enter_scoped_for(__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 9851, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 09852: 
+09853:     cdef void _exit_scoped_call(self) except *:
static void __pyx_f_7questdb_7_client_7QuestDB__exit_scoped_call(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client.QuestDB._exit_scoped_call", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}
+09854:         _exit_scoped_for(self._thread_owner_token)
  __pyx_t_1 = __pyx_v_self->_thread_owner_token;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_f_7questdb_7_client__exit_scoped_for(__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 9854, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 09855: 
+09856:     cdef void _end_db_use(self, bint scoped=True) except *:
static void __pyx_f_7questdb_7_client_7QuestDB__end_db_use(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self, struct __pyx_opt_args_7questdb_7_client_7QuestDB__end_db_use *__pyx_optional_args) {
  int __pyx_v_scoped = ((int)1);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_scoped = __pyx_optional_args->scoped;
    }
  }
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client.QuestDB._end_db_use", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}
/* … */
struct __pyx_opt_args_7questdb_7_client_7QuestDB__end_db_use {
  int __pyx_n;
  int scoped;
};
+09857:         self._state_cond.acquire()
  __pyx_t_2 = __pyx_v_self->_state_cond;
  __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_acquire, __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(0, 9857, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+09858:         try:
  /*try:*/ {
+09859:             if scoped:
    if (__pyx_v_scoped) {
/* … */
      goto __pyx_L6;
    }
+09860:                 if self._call_uses == 0:
      __pyx_t_4 = (__pyx_v_self->_call_uses == 0);
      if (unlikely(__pyx_t_4)) {
/* … */
      }
+09861:                     raise RuntimeError(
        __pyx_t_2 = NULL;
        __pyx_t_3 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_QuestDB_call_use_counter_underfl};
          __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __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(0, 9861, __pyx_L4_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(0, 9861, __pyx_L4_error)
 09862:                         'QuestDB call-use counter underflow.')
 09863:                 # The thread-local update below can raise. Unwind the shared
 09864:                 # count first so a failed update cannot leave close() waiting
 09865:                 # on a call that has already returned.
+09866:                 self._call_uses -= 1
      __pyx_v_self->_call_uses = (__pyx_v_self->_call_uses - 1);
+09867:                 self._exit_scoped_call()
      ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_exit_scoped_call(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 9867, __pyx_L4_error)
 09868:             else:
+09869:                 if self._lease_uses == 0:
    /*else*/ {
      __pyx_t_4 = (__pyx_v_self->_lease_uses == 0);
      if (unlikely(__pyx_t_4)) {
/* … */
      }
+09870:                     raise RuntimeError(
        __pyx_t_2 = NULL;
        __pyx_t_3 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_QuestDB_lease_counter_underflow};
          __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __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(0, 9870, __pyx_L4_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(0, 9870, __pyx_L4_error)
 09871:                         'QuestDB lease counter underflow.')
+09872:                 self._lease_uses -= 1
      __pyx_v_self->_lease_uses = (__pyx_v_self->_lease_uses - 1);
    }
    __pyx_L6:;
+09873:             if self._lease_uses + self._call_uses == 0:
    __pyx_t_4 = ((__pyx_v_self->_lease_uses + __pyx_v_self->_call_uses) == 0);
    if (__pyx_t_4) {
/* … */
    }
  }
+09874:                 self._state_cond.notify_all()
      __pyx_t_2 = __pyx_v_self->_state_cond;
      __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_notify_all, __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(0, 9874, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 09875:         finally:
+09876:             self._state_cond.release()
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_2 = __pyx_v_self->_state_cond;
      __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_release, __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(0, 9876, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
      if ( unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __pyx_t_5 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_7 = __pyx_filename;
      {
        __pyx_t_2 = __pyx_v_self->_state_cond;
        __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_release, __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(0, 9876, __pyx_L11_error)
          __Pyx_GOTREF(__pyx_t_1);
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_ErrRestore(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      __pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_7;
      goto __pyx_L1_error;
      __pyx_L11_error:;
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      __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;
      __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }
 09877: 
+09878:     @staticmethod
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_5from_conf(CYTHON_UNUSED 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_7QuestDB_4from_conf, "\n        Construct a handle from a QWP/WebSocket configuration string.\n\n        Prefer the :func:`questdb.connect` module-level factory.\n\n        By default the handle connects eagerly: construction pre-opens the\n        warm minimums (``sender_pool_min`` sender and ``query_pool_min``\n        reader connections, one of each by default), so an unreachable\n        server or bad credentials fail here, fast. With\n        ``lazy_connect=true`` construction opens no connection: sender\n        leases buffer locally and connect in the background, readers\n        connect on first use (``query_pool_min`` defaults to 0), and\n        errors surface from the first operation instead. Combining\n        ``lazy_connect=true`` with a blocking ``initial_connect_retry``\n        or a positive ``query_pool_min`` is a configuration conflict.\n\n        Pooled row auto-flush is enabled by default at 1,000 rows, 100\n        milliseconds, or an estimated encoded size at 90% of the effective\n        frame cap. Before a server cap is known, or when the server omits it,\n        the byte threshold is 90% of the lower of QuestDB's default cap, 2 MiB\n        less 14 bytes, and the local store-and-forward frame cap. Set\n        ``auto_flush_bytes=off`` to disable only the byte trigger, or\n        ``auto_flush=off`` to disable all automatic publishing.\n        The mode is immutable and shared by every lease; the interval starts\n        when the first row enters an empty lease buffer. Auto-triggered\n        publishes do not wait for server acknowledgement.\n\n        ``oidc_auth`` attaches a native rotating OIDC token provider. Call its\n        :meth:`~questdb.auth.OidcDeviceAuth.sign_in` method before constructing\n        the pool; connection and reconnect paths never start an interactive\n        device flow.\n        Use ``wss::``: over plain ``ws::`` to a non-loopback host the token is\n        sent in cleartext. A closed provider raises\n        :class:`~questdb.auth.Oid""cCancelledError`.\n\n        ``bearer_token_provider`` attaches a rotating Bearer-token provider\n        instead: a :class:`questdb.auth.RefreshingTokenProvider` around a token\n        source of your own, a callable returning a token, or an object with\n        ``token()`` and an optional ``on_rejected()`` -- see\n        :ref:`refreshing_token_provider`. It is mutually exclusive with\n        ``oidc_auth``, ``token``, ``username`` and ``password``. A provider\n        that runs on the calling thread runs inside the call that needs the\n        token; see :ref:`token_provider_reentrancy` for what it, and a Python\n        signal handler that runs there, must not do.\n\n        The connection pool is opened eagerly unless configuration selects a\n        lazy connection. Dataframe ingestion always uses the direct\n        (non-store-and-forward)\n        QWP/WebSocket column sender, independent of ``sf_dir``. On a transient\n        connection failure the original DataFrame is re-sent only when no\n        batch was successfully published and the failed operation is provably\n        not delivered. Once a prefix may have committed, the call raises\n        instead of replaying from row zero. A delivery-unknown failure surfaces\n        as :class:`QuestDBError` with ``in_doubt`` set.\n        ``request_timeout`` bounds each commit's no-progress ack wait;\n        ``request_timeout=0`` disables that deadline, so a stalled but\n        connected server can block :meth:`dataframe` indefinitely.\n\n        ``connection_listener``, when set, is a callable receiving one\n        :class:`ConnectionEvent` per connection-state transition of the\n        pool's ingress connections: connects, disconnects and reconnects,\n        per-endpoint attempt failures, failover, credential rejections and\n        token-provider failures (see :class:`ConnectionEventKind`). A\n        credential the server rejects (``AuthFailed``) fails a connection\n        that is waited for -- the eage""r first connect, or a borrow that\n        opens a connection -- but a sender that has already connected keeps\n        reconnecting and reports each rejected attempt. For a token-provider\n        failure (``CredentialUnavailable``),\n        :attr:`ConnectionEvent.cause_code` tells a retry (``SocketError``)\n        from a stop (``AuthError`` or ``ConfigError``). See\n        :ref:`token_rejections`. The listener runs on a\n        dedicated dispatcher thread fed by a bounded inbox\n        (``connection_event_inbox_capacity``; ``0`` selects the default\n        of 64) with a drop-oldest overflow policy, so a slow listener\n        cannot stall ingest or reconnects. Exceptions it raises are\n        logged and swallowed. Dropped/delivered totals are available via\n        :attr:`connection_events_dropped` /\n        :attr:`connection_events_delivered`. Successful events are queued\n        only after negotiated state, including the server frame cap, is\n        committed; they do not acknowledge data.\n\n        ``error_handler``, when set, is a callable receiving one\n        :class:`SenderError` per server rejection recorded by any of the\n        pool's store-and-forward connections \342\200\224 including rejections for\n        rows published through a :class:`PooledSender` that was already\n        closed. It runs on its own dedicated dispatcher thread fed by a\n        bounded inbox (``error_event_inbox_capacity``; ``0`` selects the\n        default of 64, overflow drops the oldest event). Exceptions it\n        raises are logged and swallowed. Without a handler every rejection\n        is logged through the ``questdb`` logger instead \342\200\224 ``ERROR`` for\n        terminal rejections, ``WARNING`` for retriable ones (the affected\n        rows are replayed, not lost) \342\200\224 so rejections are never silent.\n        A terminal rejection is queued only after the connection's terminal\n        latch and pollable diagnostic have been committed.\n      ""  Delivered/dropped totals are available via\n        :attr:`error_events_delivered` /\n        :attr:`error_events_dropped`. Use the handler for\n        dead-lettering, alerting, and metrics; terminal failures also\n        surface as :class:`QuestDBError` from the sender calls themselves.\n\n        When a handler or listener closes over the returned handle, call\n        :meth:`close` explicitly (or use ``with``): until closed, such a\n        handle is pinned alive rather than collected, so an abandoned one\n        leaks instead of crashing. The pin is dropped at interpreter\n        shutdown, so an unclosed self-referential handle can still crash\n        during finalization.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_7QuestDB_5from_conf = {"from_conf", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_5from_conf, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_4from_conf};
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_5from_conf(CYTHON_UNUSED 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_conf_str = 0;
  PyObject *__pyx_v_oidc_auth = 0;
  PyObject *__pyx_v_bearer_token_provider = 0;
  PyObject *__pyx_v_connection_listener = 0;
  PyObject *__pyx_v_connection_event_inbox_capacity = 0;
  PyObject *__pyx_v_error_handler = 0;
  PyObject *__pyx_v_error_event_inbox_capacity = 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("from_conf (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_conf_str,&__pyx_mstate_global->__pyx_n_u_oidc_auth,&__pyx_mstate_global->__pyx_n_u_bearer_token_provider_2,&__pyx_mstate_global->__pyx_n_u_connection_listener,&__pyx_mstate_global->__pyx_n_u_connection_event_inbox_capacity,&__pyx_mstate_global->__pyx_n_u_error_handler,&__pyx_mstate_global->__pyx_n_u_error_event_inbox_capacity,0};
  PyObject* values[7] = {0,0,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(0, 9878, __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(0, 9878, __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, "from_conf", 0) < (0)) __PYX_ERR(0, 9878, __pyx_L3_error)
/* … */
  /* 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_gb_7questdb_7_client_7QuestDB_9from_conf_2generator8(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_4from_conf(PyObject *__pyx_v_conf_str, PyObject *__pyx_v_oidc_auth, PyObject *__pyx_v_bearer_token_provider, PyObject *__pyx_v_connection_listener, PyObject *__pyx_v_connection_event_inbox_capacity, PyObject *__pyx_v_error_handler, PyObject *__pyx_v_error_event_inbox_capacity) {
  struct __pyx_obj_7questdb_7_client___pyx_scope_struct_11_from_conf *__pyx_cur_scope;
  struct line_sender_error *__pyx_v_err;
  struct line_sender_utf8 __pyx_v_c_conf;
  enum line_sender_protocol __pyx_v_c_protocol;
  PyObject *__pyx_v_protocol = 0;
  PyObject *__pyx_v_params = 0;
  int __pyx_v_auto_flush_configured;
  PyObject *__pyx_v_native_conf_str = 0;
  struct qdb_pystr_buf *__pyx_v_b;
  struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_db = 0;
  PyThreadState *__pyx_v_gs;
  void *__pyx_v_connection_listener_data;
  questdb_connection_event_cb __pyx_v_connection_event_cb;
  size_t __pyx_v_c_event_inbox_capacity;
  size_t __pyx_v_c_error_inbox_capacity;
  struct questdb_db_connect_options __pyx_v_connect_options;
  PyObject *__pyx_v_conflicting = NULL;
  PyObject *__pyx_gb_7questdb_7_client_7QuestDB_9from_conf_2generator8 = 0;
  PyObject *__pyx_9genexpr27__pyx_v_key = NULL;
  PyObject *__pyx_gb_7questdb_7_client_7QuestDB_9from_conf_5generator9 = 0;
  PyObject *__pyx_9genexpr29__pyx_v_key = NULL;
  PyObject *__pyx_gb_7questdb_7_client_7QuestDB_9from_conf_8generator10 = 0;
  PyObject *__pyx_r = NULL;
  __pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_11_from_conf *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_11_from_conf(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_11_from_conf, __pyx_mstate_global->__pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_7questdb_7_client___pyx_scope_struct_11_from_conf *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 9878, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __Pyx_INCREF(__pyx_v_error_handler);
/* … */
  /* 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.QuestDB.from_conf", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_protocol);
  __Pyx_XDECREF(__pyx_v_params);
  __Pyx_XDECREF(__pyx_v_native_conf_str);
  __Pyx_XDECREF((PyObject *)__pyx_v_db);
  __Pyx_XDECREF(__pyx_v_conflicting);
  __Pyx_XDECREF(__pyx_gb_7questdb_7_client_7QuestDB_9from_conf_2generator8);
  __Pyx_XDECREF(__pyx_9genexpr27__pyx_v_key);
  __Pyx_XDECREF(__pyx_gb_7questdb_7_client_7QuestDB_9from_conf_5generator9);
  __Pyx_XDECREF(__pyx_9genexpr29__pyx_v_key);
  __Pyx_XDECREF(__pyx_gb_7questdb_7_client_7QuestDB_9from_conf_8generator10);
  __Pyx_XDECREF(__pyx_v_error_handler);
  __Pyx_DECREF((PyObject *)__pyx_cur_scope);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 9878, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
/* … */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_5from_conf, __Pyx_CYFUNCTION_STATICMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB_from_conf, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[210])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 9878, __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_CyFunction_SetDefaultsKwDict(__pyx_t_4, __pyx_t_17);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_from_conf, __pyx_t_4) < (0)) __PYX_ERR(0, 9878, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_17 = NULL;
  __Pyx_GetNameInClass(__pyx_t_25, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_from_conf); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 9878, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_17, __pyx_t_25};
    __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_staticmethod, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
    __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 9878, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_from_conf, __pyx_t_4) < (0)) __PYX_ERR(0, 9878, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_11_from_conf {
  PyObject_HEAD
  PyObject *__pyx_v_auto_flush_keys;
};

 09879:     def from_conf(
 09880:             str conf_str,
 09881:             *,
+09882:             oidc_auth=None,
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_oidc_auth, Py_None) < (0)) __PYX_ERR(0, 9878, __pyx_L1_error)
+09883:             bearer_token_provider=None,
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_bearer_token_provider_2, Py_None) < (0)) __PYX_ERR(0, 9878, __pyx_L1_error)
+09884:             connection_listener=None,
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
/* … */
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_connection_listener, Py_None) < (0)) __PYX_ERR(0, 9878, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_connection_event_inbox_capacity, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 9878, __pyx_L1_error)
 09885:             connection_event_inbox_capacity=0,
+09886:             error_handler=None,
      if (!values[5]) values[5] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[6]) values[6] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("from_conf", 1, 1, 1, i); __PYX_ERR(0, 9878, __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(0, 9878, __pyx_L3_error)
/* … */
      if (!values[5]) values[5] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[6]) values[6] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
    }
    __pyx_v_conf_str = ((PyObject*)values[0]);
    __pyx_v_oidc_auth = values[1];
    __pyx_v_bearer_token_provider = values[2];
    __pyx_v_connection_listener = values[3];
    __pyx_v_connection_event_inbox_capacity = values[4];
    __pyx_v_error_handler = values[5];
    __pyx_v_error_event_inbox_capacity = values[6];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("from_conf", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 9878, __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.QuestDB.from_conf", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_conf_str), (&PyUnicode_Type), 1, "conf_str", 1))) __PYX_ERR(0, 9880, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_4from_conf(__pyx_v_conf_str, __pyx_v_oidc_auth, __pyx_v_bearer_token_provider, __pyx_v_connection_listener, __pyx_v_connection_event_inbox_capacity, __pyx_v_error_handler, __pyx_v_error_event_inbox_capacity);
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_error_handler, Py_None) < (0)) __PYX_ERR(0, 9878, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_error_event_inbox_capacity, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 9878, __pyx_L1_error)
 09887:             error_event_inbox_capacity=0):
 09888:         """
 09889:         Construct a handle from a QWP/WebSocket configuration string.
 09890: 
 09891:         Prefer the :func:`questdb.connect` module-level factory.
 09892: 
 09893:         By default the handle connects eagerly: construction pre-opens the
 09894:         warm minimums (``sender_pool_min`` sender and ``query_pool_min``
 09895:         reader connections, one of each by default), so an unreachable
 09896:         server or bad credentials fail here, fast. With
 09897:         ``lazy_connect=true`` construction opens no connection: sender
 09898:         leases buffer locally and connect in the background, readers
 09899:         connect on first use (``query_pool_min`` defaults to 0), and
 09900:         errors surface from the first operation instead. Combining
 09901:         ``lazy_connect=true`` with a blocking ``initial_connect_retry``
 09902:         or a positive ``query_pool_min`` is a configuration conflict.
 09903: 
 09904:         Pooled row auto-flush is enabled by default at 1,000 rows, 100
 09905:         milliseconds, or an estimated encoded size at 90% of the effective
 09906:         frame cap. Before a server cap is known, or when the server omits it,
 09907:         the byte threshold is 90% of the lower of QuestDB's default cap, 2 MiB
 09908:         less 14 bytes, and the local store-and-forward frame cap. Set
 09909:         ``auto_flush_bytes=off`` to disable only the byte trigger, or
 09910:         ``auto_flush=off`` to disable all automatic publishing.
 09911:         The mode is immutable and shared by every lease; the interval starts
 09912:         when the first row enters an empty lease buffer. Auto-triggered
 09913:         publishes do not wait for server acknowledgement.
 09914: 
 09915:         ``oidc_auth`` attaches a native rotating OIDC token provider. Call its
 09916:         :meth:`~questdb.auth.OidcDeviceAuth.sign_in` method before constructing
 09917:         the pool; connection and reconnect paths never start an interactive
 09918:         device flow.
 09919:         Use ``wss::``: over plain ``ws::`` to a non-loopback host the token is
 09920:         sent in cleartext. A closed provider raises
 09921:         :class:`~questdb.auth.OidcCancelledError`.
 09922: 
 09923:         ``bearer_token_provider`` attaches a rotating Bearer-token provider
 09924:         instead: a :class:`questdb.auth.RefreshingTokenProvider` around a token
 09925:         source of your own, a callable returning a token, or an object with
 09926:         ``token()`` and an optional ``on_rejected()`` -- see
 09927:         :ref:`refreshing_token_provider`. It is mutually exclusive with
 09928:         ``oidc_auth``, ``token``, ``username`` and ``password``. A provider
 09929:         that runs on the calling thread runs inside the call that needs the
 09930:         token; see :ref:`token_provider_reentrancy` for what it, and a Python
 09931:         signal handler that runs there, must not do.
 09932: 
 09933:         The connection pool is opened eagerly unless configuration selects a
 09934:         lazy connection. Dataframe ingestion always uses the direct
 09935:         (non-store-and-forward)
 09936:         QWP/WebSocket column sender, independent of ``sf_dir``. On a transient
 09937:         connection failure the original DataFrame is re-sent only when no
 09938:         batch was successfully published and the failed operation is provably
 09939:         not delivered. Once a prefix may have committed, the call raises
 09940:         instead of replaying from row zero. A delivery-unknown failure surfaces
 09941:         as :class:`QuestDBError` with ``in_doubt`` set.
 09942:         ``request_timeout`` bounds each commit's no-progress ack wait;
 09943:         ``request_timeout=0`` disables that deadline, so a stalled but
 09944:         connected server can block :meth:`dataframe` indefinitely.
 09945: 
 09946:         ``connection_listener``, when set, is a callable receiving one
 09947:         :class:`ConnectionEvent` per connection-state transition of the
 09948:         pool's ingress connections: connects, disconnects and reconnects,
 09949:         per-endpoint attempt failures, failover, credential rejections and
 09950:         token-provider failures (see :class:`ConnectionEventKind`). A
 09951:         credential the server rejects (``AuthFailed``) fails a connection
 09952:         that is waited for -- the eager first connect, or a borrow that
 09953:         opens a connection -- but a sender that has already connected keeps
 09954:         reconnecting and reports each rejected attempt. For a token-provider
 09955:         failure (``CredentialUnavailable``),
 09956:         :attr:`ConnectionEvent.cause_code` tells a retry (``SocketError``)
 09957:         from a stop (``AuthError`` or ``ConfigError``). See
 09958:         :ref:`token_rejections`. The listener runs on a
 09959:         dedicated dispatcher thread fed by a bounded inbox
 09960:         (``connection_event_inbox_capacity``; ``0`` selects the default
 09961:         of 64) with a drop-oldest overflow policy, so a slow listener
 09962:         cannot stall ingest or reconnects. Exceptions it raises are
 09963:         logged and swallowed. Dropped/delivered totals are available via
 09964:         :attr:`connection_events_dropped` /
 09965:         :attr:`connection_events_delivered`. Successful events are queued
 09966:         only after negotiated state, including the server frame cap, is
 09967:         committed; they do not acknowledge data.
 09968: 
 09969:         ``error_handler``, when set, is a callable receiving one
 09970:         :class:`SenderError` per server rejection recorded by any of the
 09971:         pool's store-and-forward connections — including rejections for
 09972:         rows published through a :class:`PooledSender` that was already
 09973:         closed. It runs on its own dedicated dispatcher thread fed by a
 09974:         bounded inbox (``error_event_inbox_capacity``; ``0`` selects the
 09975:         default of 64, overflow drops the oldest event). Exceptions it
 09976:         raises are logged and swallowed. Without a handler every rejection
 09977:         is logged through the ``questdb`` logger instead — ``ERROR`` for
 09978:         terminal rejections, ``WARNING`` for retriable ones (the affected
 09979:         rows are replayed, not lost) — so rejections are never silent.
 09980:         A terminal rejection is queued only after the connection's terminal
 09981:         latch and pollable diagnostic have been committed.
 09982:         Delivered/dropped totals are available via
 09983:         :attr:`error_events_delivered` /
 09984:         :attr:`error_events_dropped`. Use the handler for
 09985:         dead-lettering, alerting, and metrics; terminal failures also
 09986:         surface as :class:`QuestDBError` from the sender calls themselves.
 09987: 
 09988:         When a handler or listener closes over the returned handle, call
 09989:         :meth:`close` explicitly (or use ``with``): until closed, such a
 09990:         handle is pinned alive rather than collected, so an abandoned one
 09991:         leaks instead of crashing. The pin is dropped at interpreter
 09992:         shutdown, so an unclosed self-referential handle can still crash
 09993:         during finalization.
 09994:         """
+09995:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 09996:         cdef line_sender_utf8 c_conf
 09997:         cdef line_sender_protocol c_protocol
 09998:         cdef object protocol
 09999:         cdef dict params
+10000:         cdef set auto_flush_keys = {
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10001, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush) < (0)) __PYX_ERR(0, 10001, __pyx_L1_error)
  if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_rows) < (0)) __PYX_ERR(0, 10001, __pyx_L1_error)
  if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes) < (0)) __PYX_ERR(0, 10001, __pyx_L1_error)
  if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_interval) < (0)) __PYX_ERR(0, 10001, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_auto_flush_keys = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 10001:             'auto_flush',
 10002:             'auto_flush_rows',
 10003:             'auto_flush_bytes',
 10004:             'auto_flush_interval',
 10005:         }
 10006:         cdef bint auto_flush_configured
 10007:         cdef str native_conf_str
+10008:         cdef qdb_pystr_buf* b = qdb_pystr_buf_new()
  __pyx_v_b = qdb_pystr_buf_new();
+10009:         cdef QuestDB db = QuestDB.__new__(QuestDB)
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_7questdb_7_client_QuestDB(((PyTypeObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB), __pyx_mstate_global->__pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10009, __pyx_L1_error)
  __Pyx_GOTREF((PyObject *)__pyx_t_1);
  __pyx_v_db = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_1);
  __pyx_t_1 = 0;
+10010:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+10011:         cdef void* connection_listener_data = NULL
  __pyx_v_connection_listener_data = NULL;
+10012:         cdef questdb_connection_event_cb connection_event_cb = NULL
  __pyx_v_connection_event_cb = NULL;
 10013:         cdef size_t c_event_inbox_capacity
 10014:         cdef size_t c_error_inbox_capacity
 10015:         cdef questdb_db_connect_options connect_options
+10016:         try:
  /*try:*/ {
+10017:             protocol, params = parse_conf_str(b, conf_str)
    __pyx_t_1 = __pyx_f_7questdb_7_client_parse_conf_str(__pyx_v_b, __pyx_v_conf_str); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10017, __pyx_L4_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 != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 10017, __pyx_L4_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0);
        __Pyx_INCREF(__pyx_t_2);
        __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1);
        __Pyx_INCREF(__pyx_t_3);
      } else {
        __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10017, __pyx_L4_error)
        __Pyx_XGOTREF(__pyx_t_2);
        __pyx_t_3 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10017, __pyx_L4_error)
        __Pyx_XGOTREF(__pyx_t_3);
      }
      #else
      __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10017, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10017, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_3);
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10017, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4);
      index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L6_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_2);
      index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L6_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_3);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < (0)) __PYX_ERR(0, 10017, __pyx_L4_error)
      __pyx_t_5 = NULL;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      goto __pyx_L7_unpacking_done;
      __pyx_L6_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_5 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 10017, __pyx_L4_error)
      __pyx_L7_unpacking_done:;
    }
    if (!(likely(PyDict_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_3))) __PYX_ERR(0, 10017, __pyx_L4_error)
    __pyx_v_protocol = __pyx_t_2;
    __pyx_t_2 = 0;
    __pyx_v_params = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
 10018:             # Here rather than in native, whose message also names the C,
 10019:             # C++ and Rust APIs: the same wording as `Sender.from_conf`.
+10020:             _tp_reject_conf_keys(params)
    __pyx_t_6 = __pyx_f_7questdb_7_client__tp_reject_conf_keys(__pyx_v_params); if (unlikely(__pyx_t_6 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10020, __pyx_L4_error)
+10021:             if protocol not in (Protocol.Ws, Protocol.Wss):
    __Pyx_INCREF(__pyx_v_protocol);
    __pyx_t_1 = __pyx_v_protocol;
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Protocol); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10021, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Ws); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10021, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10021, __pyx_L4_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 10021, __pyx_L4_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_8) {
    } else {
      __pyx_t_7 = __pyx_t_8;
      goto __pyx_L9_bool_binop_done;
    }
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Protocol); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10021, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Wss); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10021, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10021, __pyx_L4_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 10021, __pyx_L4_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_7 = __pyx_t_8;
    __pyx_L9_bool_binop_done:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_8 = __pyx_t_7;
    if (unlikely(__pyx_t_8)) {
/* … */
    }
+10022:                 raise QuestDBError(
      __pyx_t_3 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10022, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
+10023:                     QuestDBErrorCode.ConfigError,
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10023, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10023, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_10 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
        assert(__pyx_t_3);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
        __pyx_t_10 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_9, __pyx_mstate_global->__pyx_kp_u_questdb_connect_requires_a_QWP_W};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __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_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10022, __pyx_L4_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(0, 10022, __pyx_L4_error)
 10024:                     'questdb.connect() requires a QWP/WebSocket '
 10025:                     'configuration string: ws:: or wss::.')
+10026:             if params.get('addr') is None:
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 10026, __pyx_L4_error)
    }
    __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_addr, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10026, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_8 = (__pyx_t_1 == Py_None);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(__pyx_t_8)) {
/* … */
    }
+10027:                 raise QuestDBError(
      __pyx_t_2 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10027, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_9);
+10028:                     QuestDBErrorCode.ConfigError,
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10028, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10028, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_10 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_9);
        assert(__pyx_t_2);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_9, __pyx__function);
        __pyx_t_10 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_4, __pyx_mstate_global->__pyx_kp_u_Missing_addr_parameter_in_config};
        __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_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10027, __pyx_L4_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(0, 10027, __pyx_L4_error)
 10029:                     'Missing "addr" parameter in config string')
 10030: 
 10031:             # The pooled native core does not implement row-buffer
 10032:             # auto-flushing: it rejects the threshold keys and accepts only
 10033:             # auto_flush=off. Keep this Python-owned handle configuration out
 10034:             # of the native connect string. Pooled QWP uses its own defaults,
 10035:             # while validation stays shared with the standalone Sender.
+10036:             c_protocol = protocol.c_value
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_protocol, __pyx_mstate_global->__pyx_n_u_c_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10036, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_11 = ((enum line_sender_protocol)__Pyx_PyLong_As_enum__line_sender_protocol(__pyx_t_1)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10036, __pyx_L4_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_c_protocol = __pyx_t_11;
+10037:             auto_flush_configured = not auto_flush_keys.isdisjoint(params)
    __pyx_t_1 = __Pyx_CallUnboundCMethod1(&__pyx_mstate_global->__pyx_umethod_PySet_Type__isdisjoint, __pyx_cur_scope->__pyx_v_auto_flush_keys, __pyx_v_params); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10037, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 10037, __pyx_L4_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_auto_flush_configured = (!__pyx_t_8);
+10038:             _parse_pooled_auto_flush(
    __pyx_t_6 = __pyx_f_7questdb_7_client__parse_pooled_auto_flush(__pyx_v_c_protocol, __pyx_t_1, __pyx_t_9, __pyx_t_4, __pyx_t_2, (&__pyx_v_db->_auto_flush_mode), (&__pyx_v_db->_auto_flush_bytes_dynamic)); if (unlikely(__pyx_t_6 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10038, __pyx_L4_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 10039:                 c_protocol,
+10040:                 params.get('auto_flush'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 10040, __pyx_L4_error)
    }
    __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_auto_flush, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10040, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
+10041:                 params.get('auto_flush_rows'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 10041, __pyx_L4_error)
    }
    __pyx_t_9 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_auto_flush_rows, Py_None); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10041, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_9);
+10042:                 params.get('auto_flush_bytes'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 10042, __pyx_L4_error)
    }
    __pyx_t_4 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10042, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_4);
+10043:                 params.get('auto_flush_interval'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 10043, __pyx_L4_error)
    }
    __pyx_t_2 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_auto_flush_interval, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10043, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
 10044:                 &db._auto_flush_mode,
 10045:                 &db._auto_flush_bytes_dynamic)
+10046:             if auto_flush_configured:
    if (__pyx_v_auto_flush_configured) {
/* … */
      goto __pyx_L12;
    }
+10047:                 native_conf_str = protocol.tag + '::' + ''.join(
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_protocol, __pyx_mstate_global->__pyx_n_u_tag); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10047, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = PyNumber_Add(__pyx_t_2, __pyx_mstate_global->__pyx_kp_u__37); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10047, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
      __pyx_t_9 = __Pyx_Generator_GetInlinedResult(__pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10047, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__7, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10047, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = PyNumber_Add(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10047, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (!(likely(PyUnicode_CheckExact(__pyx_t_9))||((__pyx_t_9) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_9))) __PYX_ERR(0, 10047, __pyx_L4_error)
      __pyx_v_native_conf_str = ((PyObject*)__pyx_t_9);
      __pyx_t_9 = 0;
+10048:                     f'{key}={conf_str_value(value)};'
static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_9from_conf_genexpr(PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
  struct __pyx_obj_7questdb_7_client___pyx_scope_struct_12_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_12_genexpr *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_12_genexpr(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_12_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_12_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 10048, __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_11_from_conf *) __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_7QuestDB_9from_conf_2generator8, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[8]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_from_conf_locals_genexpr, __pyx_mstate_global->__pyx_n_u_questdb__client); if (unlikely(!gen)) __PYX_ERR(0, 10048, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client.QuestDB.from_conf.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_7QuestDB_9from_conf_2generator8(__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(0, 10048, __pyx_L1_error)
  __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 10048, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_r);
/* … */
      __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_key, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 10048, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_5 = __pyx_f_7questdb_7_client_conf_str_value(__pyx_cur_scope->__pyx_v_value); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 10048, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_9 = __Pyx_PyUnicode_Unicode(__pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10048, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_10[0] = __pyx_t_6;
      __pyx_t_10[1] = __pyx_mstate_global->__pyx_kp_u__36;
      __pyx_t_10[2] = __pyx_t_9;
      __pyx_t_10[3] = __pyx_mstate_global->__pyx_kp_u__29;
      __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_10, 4, __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6) + 1 * 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9));
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 10048, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_r, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 10048, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_9);
  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;
}
static PyObject *__pyx_gb_7questdb_7_client_7QuestDB_9from_conf_5generator9(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
      __pyx_t_2 = __pyx_pf_7questdb_7_client_7QuestDB_9from_conf_genexpr(((PyObject*)__pyx_cur_scope), __pyx_v_params); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10048, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_12_genexpr {
  PyObject_HEAD
  struct __pyx_obj_7questdb_7_client___pyx_scope_struct_11_from_conf *__pyx_outer_scope;
  PyObject *__pyx_genexpr_arg_0;
  PyObject *__pyx_v_key;
  PyObject *__pyx_v_value;
};

+10049:                     for key, value in params.items()
  __pyx_t_2 = 0;
  if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 10049, __pyx_L1_error) }
  if (unlikely(__pyx_cur_scope->__pyx_genexpr_arg_0 == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
    __PYX_ERR(0, 10049, __pyx_L1_error)
  }
  __pyx_t_5 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_genexpr_arg_0, 1, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 10049, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_5;
  __pyx_t_5 = 0;
  while (1) {
    __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, &__pyx_t_5, &__pyx_t_6, NULL, __pyx_t_4);
    if (unlikely(__pyx_t_7 == 0)) break;
    if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 10049, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_key);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_key, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    __pyx_t_5 = 0;
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_value);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_value, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_6);
    __pyx_t_6 = 0;
+10050:                     if key not in auto_flush_keys)
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_auto_flush_keys)) { __Pyx_RaiseClosureNameError("auto_flush_keys"); __PYX_ERR(0, 10050, __pyx_L1_error) }
    if (unlikely(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_auto_flush_keys == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 10050, __pyx_L1_error)
    }
    __pyx_t_8 = (__Pyx_PySet_ContainsTF(__pyx_cur_scope->__pyx_v_key, __pyx_cur_scope->__pyx_outer_scope->__pyx_v_auto_flush_keys, Py_NE)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 10050, __pyx_L1_error)
    if (__pyx_t_8) {
/* … */
    }
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 10051:             else:
 10052:                 # Preserve the native configuration path byte for byte when
 10053:                 # there are no Python-owned auto-flush settings to remove.
+10054:                 native_conf_str = conf_str
    /*else*/ {
      __Pyx_INCREF(__pyx_v_conf_str);
      __pyx_v_native_conf_str = __pyx_v_conf_str;
    }
    __pyx_L12:;
 10055: 
+10056:             if connection_listener is not None and not callable(
    __pyx_t_7 = (__pyx_v_connection_listener != Py_None);
    if (__pyx_t_7) {
    } else {
      __pyx_t_8 = __pyx_t_7;
      goto __pyx_L14_bool_binop_done;
    }
/* … */
    __pyx_t_7 = __Pyx_PyCallable_Check(__pyx_v_connection_listener); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 10056, __pyx_L4_error)
/* … */
    __pyx_t_12 = (!__pyx_t_7);
    __pyx_t_8 = __pyx_t_12;
    __pyx_L14_bool_binop_done:;
    if (unlikely(__pyx_t_8)) {
/* … */
    }
 10057:                     connection_listener):
+10058:                 raise TypeError(
      __pyx_t_2 = NULL;
+10059:                     '"connection_listener" must be callable or None, '
      __pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_connection_listener_must_be_cal, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10059, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_10 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4};
        __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__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_9)) __PYX_ERR(0, 10058, __pyx_L4_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(0, 10058, __pyx_L4_error)
+10060:                     f'not {_fqn(type(connection_listener))}')
      __pyx_t_4 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_connection_listener)))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10060, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10060, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+10061:             if error_handler is not None and not callable(
    __pyx_t_12 = (__pyx_v_error_handler != Py_None);
    if (__pyx_t_12) {
    } else {
      __pyx_t_8 = __pyx_t_12;
      goto __pyx_L17_bool_binop_done;
    }
/* … */
    __pyx_t_12 = __Pyx_PyCallable_Check(__pyx_v_error_handler); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 10061, __pyx_L4_error)
/* … */
    __pyx_t_7 = (!__pyx_t_12);
    __pyx_t_8 = __pyx_t_7;
    __pyx_L17_bool_binop_done:;
    if (unlikely(__pyx_t_8)) {
/* … */
    }
 10062:                     error_handler):
+10063:                 raise TypeError(
      __pyx_t_4 = NULL;
+10064:                     '"error_handler" must be callable or None, '
      __pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_error_handler_must_be_callable, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10064, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_10 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_2};
        __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__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_9)) __PYX_ERR(0, 10063, __pyx_L4_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(0, 10063, __pyx_L4_error)
+10065:                     f'not {_fqn(type(error_handler))}')
      __pyx_t_2 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_error_handler)))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10065, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10065, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+10066:             if oidc_auth is not None and not isinstance(
    __pyx_t_7 = (__pyx_v_oidc_auth != Py_None);
    if (__pyx_t_7) {
    } else {
      __pyx_t_8 = __pyx_t_7;
      goto __pyx_L20_bool_binop_done;
    }
/* … */
    __pyx_t_12 = (!__pyx_t_7);
    __pyx_t_8 = __pyx_t_12;
    __pyx_L20_bool_binop_done:;
    if (unlikely(__pyx_t_8)) {
/* … */
    }
+10067:                     oidc_auth, OidcDeviceAuth):
    __pyx_t_7 = __Pyx_TypeCheck(__pyx_v_oidc_auth, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth); 
+10068:                 raise _ConfigTypeError(
      __pyx_t_2 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_ConfigTypeError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10068, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_4);
+10069:                     '"oidc_auth" must be an OidcDeviceAuth or None, '
      __pyx_t_1 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_oidc_auth_must_be_an_OidcDevice, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10069, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_10 = 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_10 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_1};
        __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10068, __pyx_L4_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(0, 10068, __pyx_L4_error)
+10070:                     f'not {_fqn(type(oidc_auth))}')
      __pyx_t_1 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_oidc_auth)))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10070, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = __Pyx_PyUnicode_Unicode(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10070, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+10071:             if oidc_auth is not None:
    __pyx_t_8 = (__pyx_v_oidc_auth != Py_None);
    if (__pyx_t_8) {
/* … */
    }
+10072:                 _oidc_require_native_token(oidc_auth)
      __pyx_t_6 = __pyx_f_7questdb_7_client__oidc_require_native_token(__pyx_v_oidc_auth); if (unlikely(__pyx_t_6 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10072, __pyx_L4_error)
 10073:                 # Distinguish the two states the way `_require_open` does: a
 10074:                 # NULL handle is a provider whose construction never completed,
 10075:                 # which "is closed" misdescribes and sends the caller looking
 10076:                 # for a close() they never made.
+10077:                 if (<OidcDeviceAuth>oidc_auth)._raw == NULL:
      __pyx_t_8 = (((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_oidc_auth)->_raw == NULL);
      if (unlikely(__pyx_t_8)) {
/* … */
      }
+10078:                     raise _ConfigValueError('"oidc_auth" is not initialized')
        __pyx_t_4 = NULL;
        __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ConfigValueError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10078, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_10 = 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_10 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_oidc_auth_is_not_initialized};
          __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10078, __pyx_L4_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(0, 10078, __pyx_L4_error)
+10079:                 if (<OidcDeviceAuth>oidc_auth)._closed:
      if (((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_oidc_auth)->_closed) {
/* … */
      }
+10080:                     _raise_oidc_auth_closed()
        __pyx_t_13 = __pyx_f_7questdb_7_client__raise_oidc_auth_closed(); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 10080, __pyx_L4_error)
+10081:             if oidc_auth is not None:
    __pyx_t_8 = (__pyx_v_oidc_auth != Py_None);
    if (__pyx_t_8) {
/* … */
    }
 10082:                 # Same conflict as the Sender path. Name the keys the caller
 10083:                 # wrote rather than letting native report the internal provider
 10084:                 # key, which exists in no public API. The wording must not
 10085:                 # assume where they were written: `questdb.connect()` folds its
 10086:                 # keyword arguments into this configuration string, so a
 10087:                 # caller who passed `username=` has no string to edit.
+10088:                 conflicting = [
      { /* enter inner scope */
        __pyx_t_9 = PyList_New(0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10088, __pyx_L28_error)
        __Pyx_GOTREF(__pyx_t_9);
+10089:                     key for key in ('token', 'username', 'password')
        __pyx_t_1 = __pyx_mstate_global->__pyx_tuple[13]; __Pyx_INCREF(__pyx_t_1);
        __pyx_t_14 = 0;
        for (;;) {
          if (__pyx_t_14 >= 3) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_4 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_14));
          #else
          __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_14);
          #endif
          ++__pyx_t_14;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10089, __pyx_L28_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_XDECREF_SET(__pyx_9genexpr27__pyx_v_key, ((PyObject*)__pyx_t_4));
          __pyx_t_4 = 0;
/* … */
            if (unlikely(__Pyx_ListComp_Append(__pyx_t_9, (PyObject*)__pyx_9genexpr27__pyx_v_key))) __PYX_ERR(0, 10088, __pyx_L28_error)
/* … */
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_9genexpr27__pyx_v_key); __pyx_9genexpr27__pyx_v_key = 0;
        goto __pyx_L33_exit_scope;
        __pyx_L28_error:;
        __Pyx_XDECREF(__pyx_9genexpr27__pyx_v_key); __pyx_9genexpr27__pyx_v_key = 0;
        goto __pyx_L4_error;
        __pyx_L33_exit_scope:;
      } /* exit inner scope */
      __pyx_v_conflicting = ((PyObject*)__pyx_t_9);
      __pyx_t_9 = 0;
/* … */
  __pyx_mstate_global->__pyx_tuple[13] = PyTuple_Pack(3, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_username, __pyx_mstate_global->__pyx_n_u_password); if (unlikely(!__pyx_mstate_global->__pyx_tuple[13])) __PYX_ERR(0, 10089, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[13]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[13]);
+10090:                     if params.get(key) is not None]
          if (unlikely(__pyx_v_params == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
            __PYX_ERR(0, 10090, __pyx_L28_error)
          }
          __pyx_t_4 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_9genexpr27__pyx_v_key, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10090, __pyx_L28_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_8 = (__pyx_t_4 != Py_None);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (__pyx_t_8) {
/* … */
          }
+10091:                 if conflicting:
      {
        Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v_conflicting);
        if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 10091, __pyx_L4_error)
        __pyx_t_8 = (__pyx_temp != 0);
      }

      if (unlikely(__pyx_t_8)) {
/* … */
      }
+10092:                     raise QuestDBError(
        __pyx_t_1 = NULL;
        __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10092, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_4);
+10093:                         QuestDBErrorCode.ConfigError,
        __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10093, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10093, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 10094:                         '"oidc_auth" is mutually exclusive with '
+10095:                         + ', '.join(f'"{key}"' for key in conflicting)
static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_9from_conf_3genexpr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
  struct __pyx_obj_7questdb_7_client___pyx_scope_struct_13_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_13_genexpr *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_13_genexpr(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_13_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_13_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 10095, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_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_7QuestDB_9from_conf_5generator9, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[9]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_from_conf_locals_genexpr, __pyx_mstate_global->__pyx_n_u_questdb__client); if (unlikely(!gen)) __PYX_ERR(0, 10095, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client.QuestDB.from_conf.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_7QuestDB_9from_conf_5generator9(__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(0, 10095, __pyx_L1_error)
  __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 10095, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 10095, __pyx_L1_error) }
  __pyx_t_1 = __pyx_cur_scope->__pyx_genexpr_arg_0; __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = 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(0, 10095, __pyx_L1_error)
      #endif
      if (__pyx_t_2 >= __pyx_temp) break;
    }
    __pyx_t_3 = __Pyx_PyList_GetItemRefFast(__pyx_t_1, __pyx_t_2, __Pyx_ReferenceSharing_OwnStrongReference);
    ++__pyx_t_2;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10095, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_key);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_key, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_key, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10095, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4[0] = __pyx_mstate_global->__pyx_kp_u__26;
    __pyx_t_4[1] = __pyx_t_3;
    __pyx_t_4[2] = __pyx_mstate_global->__pyx_kp_u__26;
    __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, 1 * 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3));
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 10095, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(__Pyx_ListComp_Append(__pyx_r, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 10095, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  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;
}
static PyObject *__pyx_gb_7questdb_7_client_7QuestDB_9from_conf_8generator10(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
        __pyx_t_2 = __pyx_pf_7questdb_7_client_7QuestDB_9from_conf_3genexpr(NULL, __pyx_v_conflicting); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10095, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_15 = __Pyx_Generator_GetInlinedResult(__pyx_t_2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 10095, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_2 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__27, __pyx_t_15); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10095, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __pyx_t_15 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_oidc_auth_is_mutually_exclusive, __pyx_t_2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 10095, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_13_genexpr {
  PyObject_HEAD
  PyObject *__pyx_genexpr_arg_0;
  PyObject *__pyx_v_key;
};

+10096:                         + '. An OIDC provider supplies the credential itself; '
        __pyx_t_2 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_15, __pyx_mstate_global->__pyx_kp_u_An_OIDC_provider_supplies_the_c); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10096, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __pyx_t_10 = 1;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_4))) {
          __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
          assert(__pyx_t_1);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
          __pyx_t_10 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_3, __pyx_t_2};
          __pyx_t_9 = __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_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10092, __pyx_L4_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(0, 10092, __pyx_L4_error)
 10097:                         'remove the fixed credential, or drop "oidc_auth" to '
 10098:                         'keep using it.')
+10099:             if bearer_token_provider is not None:
    __pyx_t_8 = (__pyx_v_bearer_token_provider != Py_None);
    if (__pyx_t_8) {
/* … */
    }
+10100:                 if oidc_auth is not None:
      __pyx_t_8 = (__pyx_v_oidc_auth != Py_None);
      if (unlikely(__pyx_t_8)) {
/* … */
      }
+10101:                     raise QuestDBError(
        __pyx_t_4 = NULL;
        __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10101, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_2);
+10102:                         QuestDBErrorCode.ConfigError,
        __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10102, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10102, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_10 = 1;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_2))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
          assert(__pyx_t_4);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
          __pyx_t_10 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_1, __pyx_mstate_global->__pyx_kp_u_bearer_token_provider_and_oidc};
          __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __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_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10101, __pyx_L4_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(0, 10101, __pyx_L4_error)
 10103:                         '"bearer_token_provider" and "oidc_auth" are mutually '
 10104:                         'exclusive: attach one token provider.')
+10105:                 conflicting = [
      { /* enter inner scope */
        __pyx_t_9 = PyList_New(0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10105, __pyx_L39_error)
        __Pyx_GOTREF(__pyx_t_9);
+10106:                     key for key in ('token', 'username', 'password')
        __pyx_t_2 = __pyx_mstate_global->__pyx_tuple[13]; __Pyx_INCREF(__pyx_t_2);
        __pyx_t_14 = 0;
        for (;;) {
          if (__pyx_t_14 >= 3) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_14));
          #else
          __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_14);
          #endif
          ++__pyx_t_14;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10106, __pyx_L39_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_XDECREF_SET(__pyx_9genexpr29__pyx_v_key, ((PyObject*)__pyx_t_1));
          __pyx_t_1 = 0;
/* … */
            if (unlikely(__Pyx_ListComp_Append(__pyx_t_9, (PyObject*)__pyx_9genexpr29__pyx_v_key))) __PYX_ERR(0, 10105, __pyx_L39_error)
/* … */
        }
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_9genexpr29__pyx_v_key); __pyx_9genexpr29__pyx_v_key = 0;
        goto __pyx_L44_exit_scope;
        __pyx_L39_error:;
        __Pyx_XDECREF(__pyx_9genexpr29__pyx_v_key); __pyx_9genexpr29__pyx_v_key = 0;
        goto __pyx_L4_error;
        __pyx_L44_exit_scope:;
      } /* exit inner scope */
      __Pyx_XDECREF_SET(__pyx_v_conflicting, ((PyObject*)__pyx_t_9));
      __pyx_t_9 = 0;
+10107:                     if params.get(key) is not None]
          if (unlikely(__pyx_v_params == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
            __PYX_ERR(0, 10107, __pyx_L39_error)
          }
          __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_9genexpr29__pyx_v_key, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10107, __pyx_L39_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) {
/* … */
          }
+10108:                 if conflicting:
      {
        Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v_conflicting);
        if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 10108, __pyx_L4_error)
        __pyx_t_8 = (__pyx_temp != 0);
      }

      if (unlikely(__pyx_t_8)) {
/* … */
      }
+10109:                     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(0, 10109, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_1);
+10110:                         QuestDBErrorCode.ConfigError,
        __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10110, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10110, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 10111:                         '"bearer_token_provider" is mutually exclusive with '
+10112:                         + ', '.join(f'"{key}"' for key in conflicting)
static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_9from_conf_6genexpr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
  struct __pyx_obj_7questdb_7_client___pyx_scope_struct_14_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_14_genexpr *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_14_genexpr(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_14_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_14_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 10112, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_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_7QuestDB_9from_conf_8generator10, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[10]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_from_conf_locals_genexpr, __pyx_mstate_global->__pyx_n_u_questdb__client); if (unlikely(!gen)) __PYX_ERR(0, 10112, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client.QuestDB.from_conf.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_7QuestDB_9from_conf_8generator10(__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(0, 10112, __pyx_L1_error)
  __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 10112, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 10112, __pyx_L1_error) }
  __pyx_t_1 = __pyx_cur_scope->__pyx_genexpr_arg_0; __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = 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(0, 10112, __pyx_L1_error)
      #endif
      if (__pyx_t_2 >= __pyx_temp) break;
    }
    __pyx_t_3 = __Pyx_PyList_GetItemRefFast(__pyx_t_1, __pyx_t_2, __Pyx_ReferenceSharing_OwnStrongReference);
    ++__pyx_t_2;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10112, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_key);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_key, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_key, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10112, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4[0] = __pyx_mstate_global->__pyx_kp_u__26;
    __pyx_t_4[1] = __pyx_t_3;
    __pyx_t_4[2] = __pyx_mstate_global->__pyx_kp_u__26;
    __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, 1 * 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3));
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 10112, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(__Pyx_ListComp_Append(__pyx_r, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 10112, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  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_4 = __pyx_pf_7questdb_7_client_7QuestDB_9from_conf_6genexpr(NULL, __pyx_v_conflicting); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10112, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_15 = __Pyx_Generator_GetInlinedResult(__pyx_t_4); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 10112, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_4 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__27, __pyx_t_15); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10112, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __pyx_t_15 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_bearer_token_provider_is_mutual, __pyx_t_4); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 10112, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_14_genexpr {
  PyObject_HEAD
  PyObject *__pyx_genexpr_arg_0;
  PyObject *__pyx_v_key;
};

+10113:                         + '. A token provider supplies the credential itself; '
        __pyx_t_4 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_15, __pyx_mstate_global->__pyx_kp_u_A_token_provider_supplies_the_c); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10113, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __pyx_t_10 = 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_10 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_3, __pyx_t_4};
          __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10109, __pyx_L4_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(0, 10109, __pyx_L4_error)
 10114:                         'remove the fixed credential, or drop '
 10115:                         '"bearer_token_provider" to keep using it.')
+10116:                 db._bearer_token_provider = _tp_resolve_bearer_token_provider(
      __pyx_t_9 = __pyx_f_7questdb_7_client__tp_resolve_bearer_token_provider(__pyx_v_bearer_token_provider); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10116, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_9);
      if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_db), __pyx_mstate_global->__pyx_n_u_bearer_token_provider, __pyx_t_9) < (0)) __PYX_ERR(0, 10116, __pyx_L4_error)
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 10117:                     bearer_token_provider)
+10118:             if oidc_auth is not None or bearer_token_provider is not None:
    __pyx_t_12 = (__pyx_v_oidc_auth != Py_None);
    if (!__pyx_t_12) {
    } else {
      __pyx_t_8 = __pyx_t_12;
      goto __pyx_L47_bool_binop_done;
    }
    __pyx_t_12 = (__pyx_v_bearer_token_provider != Py_None);
    __pyx_t_8 = __pyx_t_12;
    __pyx_L47_bool_binop_done:;
    if (__pyx_t_8) {
/* … */
    }
+10119:                 _tp_warn_if_cleartext(protocol)
      __pyx_t_1 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_tp_warn_if_cleartext); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10119, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_10 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
        assert(__pyx_t_1);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
        __pyx_t_10 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_protocol};
        __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__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_9)) __PYX_ERR(0, 10119, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_9);
      }
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+10120:             str_to_utf8(b, <PyObject*>native_conf_str, &c_conf)
    __pyx_t_6 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_native_conf_str), (&__pyx_v_c_conf)); if (unlikely(__pyx_t_6 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10120, __pyx_L4_error)
+10121:             if connection_listener is not None:
    __pyx_t_8 = (__pyx_v_connection_listener != Py_None);
    if (__pyx_t_8) {
/* … */
    }
 10122:                 # Register as part of pool construction so recovery senders
 10123:                 # pre-opened by connect cannot emit events before the listener
 10124:                 # exists. The handle keeps the callback target alive until
 10125:                 # close() has stopped and joined the dispatcher.
+10126:                 db._connection_listener = connection_listener
      __Pyx_INCREF(__pyx_v_connection_listener);
      __Pyx_GIVEREF(__pyx_v_connection_listener);
      __Pyx_GOTREF(__pyx_v_db->_connection_listener);
      __Pyx_DECREF(__pyx_v_db->_connection_listener);
      __pyx_v_db->_connection_listener = __pyx_v_connection_listener;
+10127:                 connection_event_cb = _connection_event_trampoline
      __pyx_v_connection_event_cb = __pyx_f_7questdb_7_client__connection_event_trampoline;
 10128:             # A rejection handler is always installed (defaulting to the
 10129:             # `questdb` logger) because the native default logs through the
 10130:             # Rust `log` facade, which is not bridged into Python logging.
+10131:             if error_handler is None:
    __pyx_t_8 = (__pyx_v_error_handler == Py_None);
    if (__pyx_t_8) {
/* … */
    }
+10132:                 error_handler = _default_error_handler
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_default_error_handler); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 10132, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF_SET(__pyx_v_error_handler, __pyx_t_9);
      __pyx_t_9 = 0;
+10133:             db._error_handler = error_handler
    __Pyx_INCREF(__pyx_v_error_handler);
    __Pyx_GIVEREF(__pyx_v_error_handler);
    __Pyx_GOTREF(__pyx_v_db->_error_handler);
    __Pyx_DECREF(__pyx_v_db->_error_handler);
    __pyx_v_db->_error_handler = __pyx_v_error_handler;
+10134:             db._dispatch_context = _new_dispatch_context(
    __pyx_t_3 = ((PyObject *)__pyx_f_7questdb_7_client__new_dispatch_context(__pyx_t_9, __pyx_t_4, __pyx_t_1)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10134, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GIVEREF(__pyx_t_3);
    __Pyx_GOTREF(__pyx_v_db->_dispatch_context);
    __Pyx_DECREF(__pyx_v_db->_dispatch_context);
    __pyx_v_db->_dispatch_context = __pyx_t_3;
    __pyx_t_3 = 0;
+10135:                 db._thread_owner_token,
    __pyx_t_9 = __pyx_v_db->_thread_owner_token;
    __Pyx_INCREF(__pyx_t_9);
+10136:                 db._error_handler,
    __pyx_t_4 = __pyx_v_db->_error_handler;
    __Pyx_INCREF(__pyx_t_4);
+10137:                 db._connection_listener)
    __pyx_t_1 = __pyx_v_db->_connection_listener;
    __Pyx_INCREF(__pyx_t_1);
+10138:             if connection_listener is not None:
    __pyx_t_8 = (__pyx_v_connection_listener != Py_None);
    if (__pyx_t_8) {
/* … */
    }
+10139:                 connection_listener_data = <void*>db._dispatch_context
      __pyx_v_connection_listener_data = ((void *)__pyx_v_db->_dispatch_context);
 10140:             # Convert to C integers while still holding the GIL: a bad
 10141:             # value must raise here, not inside the nogil region below.
+10142:             c_event_inbox_capacity = connection_event_inbox_capacity
    __pyx_t_10 = __Pyx_PyLong_As_size_t(__pyx_v_connection_event_inbox_capacity); if (unlikely((__pyx_t_10 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 10142, __pyx_L4_error)
    __pyx_v_c_event_inbox_capacity = __pyx_t_10;
+10143:             c_error_inbox_capacity = error_event_inbox_capacity
    __pyx_t_10 = __Pyx_PyLong_As_size_t(__pyx_v_error_event_inbox_capacity); if (unlikely((__pyx_t_10 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 10143, __pyx_L4_error)
    __pyx_v_c_error_inbox_capacity = __pyx_t_10;
+10144:             questdb_db_connect_options_init(
    questdb_db_connect_options_init((&__pyx_v_connect_options), (sizeof(struct questdb_db_connect_options)));
 10145:                 &connect_options, sizeof(questdb_db_connect_options))
+10146:             connect_options.oidc_auth = (
    __pyx_v_connect_options.oidc_auth = __pyx_t_16;
+10147:                 (<OidcDeviceAuth>oidc_auth)._raw
      __pyx_t_16 = ((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_oidc_auth)->_raw;
    } else {
+10148:                 if oidc_auth is not None else NULL)
    __pyx_t_8 = (__pyx_v_oidc_auth != Py_None);
    if (__pyx_t_8) {
/* … */
      __pyx_t_16 = NULL;
    }
+10149:             if db._bearer_token_provider is not None:
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_db), __pyx_mstate_global->__pyx_n_u_bearer_token_provider); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10149, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_8 = (__pyx_t_3 != Py_None);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_8) {
/* … */
    }
+10150:                 connect_options.token_provider = _tp_holder_raw(
      __pyx_t_17 = __pyx_f_7questdb_7_client__tp_holder_raw(__pyx_t_3); if (unlikely(__pyx_t_17 == ((void *)NULL))) __PYX_ERR(0, 10150, __pyx_L4_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_v_connect_options.token_provider = __pyx_t_17;
+10151:                     db._bearer_token_provider)
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_db), __pyx_mstate_global->__pyx_n_u_bearer_token_provider); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10151, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_3);
+10152:             connect_options.event_callback = connection_event_cb
    __pyx_v_connect_options.event_callback = __pyx_v_connection_event_cb;
+10153:             connect_options.event_user_data = connection_listener_data
    __pyx_v_connect_options.event_user_data = __pyx_v_connection_listener_data;
+10154:             connect_options.event_inbox_capacity = c_event_inbox_capacity
    __pyx_v_connect_options.event_inbox_capacity = __pyx_v_c_event_inbox_capacity;
+10155:             connect_options.rejection_callback = _sender_error_trampoline
    __pyx_v_connect_options.rejection_callback = __pyx_f_7questdb_7_client__sender_error_trampoline;
+10156:             connect_options.rejection_user_data = <void*>db._dispatch_context
    __pyx_v_connect_options.rejection_user_data = ((void *)__pyx_v_db->_dispatch_context);
+10157:             connect_options.rejection_inbox_capacity = c_error_inbox_capacity
    __pyx_v_connect_options.rejection_inbox_capacity = __pyx_v_c_error_inbox_capacity;
+10158:             db._oidc_auth = oidc_auth
    __Pyx_INCREF(__pyx_v_oidc_auth);
    __Pyx_GIVEREF(__pyx_v_oidc_auth);
    __Pyx_GOTREF(__pyx_v_db->_oidc_auth);
    __Pyx_DECREF(__pyx_v_db->_oidc_auth);
    __pyx_v_db->_oidc_auth = __pyx_v_oidc_auth;
+10159:             _ensure_doesnt_have_gil(&gs)
    (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+10160:             db._db = questdb_db_connect_ex(
    __pyx_v_db->_db = questdb_db_connect_ex(__pyx_v_c_conf.buf, __pyx_v_c_conf.len, (&__pyx_v_connect_options), (&__pyx_v_err));
 10161:                 c_conf.buf,
 10162:                 c_conf.len,
 10163:                 &connect_options,
 10164:                 &err)
+10165:             _ensure_has_gil(&gs)
    __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+10166:             if db._db == NULL:
    __pyx_t_8 = (__pyx_v_db->_db == NULL);
    if (unlikely(__pyx_t_8)) {
/* … */
    }
 10167:                 # A failed handler-aware connect fences its dispatchers before
 10168:                 # returning, so the callback targets are now safe to release.
+10169:                 db._connection_listener = None
      __Pyx_INCREF(Py_None);
      __Pyx_GIVEREF(Py_None);
      __Pyx_GOTREF(__pyx_v_db->_connection_listener);
      __Pyx_DECREF(__pyx_v_db->_connection_listener);
      __pyx_v_db->_connection_listener = Py_None;
+10170:                 db._error_handler = None
      __Pyx_INCREF(Py_None);
      __Pyx_GIVEREF(Py_None);
      __Pyx_GOTREF(__pyx_v_db->_error_handler);
      __Pyx_DECREF(__pyx_v_db->_error_handler);
      __pyx_v_db->_error_handler = Py_None;
+10171:                 db._dispatch_context = None
      __Pyx_INCREF(Py_None);
      __Pyx_GIVEREF(Py_None);
      __Pyx_GOTREF(__pyx_v_db->_dispatch_context);
      __Pyx_DECREF(__pyx_v_db->_dispatch_context);
      __pyx_v_db->_dispatch_context = Py_None;
+10172:                 db._oidc_auth = None
      __Pyx_INCREF(Py_None);
      __Pyx_GIVEREF(Py_None);
      __Pyx_GOTREF(__pyx_v_db->_oidc_auth);
      __Pyx_DECREF(__pyx_v_db->_oidc_auth);
      __pyx_v_db->_oidc_auth = Py_None;
+10173:                 db._bearer_token_provider = None
      if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_db), __pyx_mstate_global->__pyx_n_u_bearer_token_provider, Py_None) < (0)) __PYX_ERR(0, 10173, __pyx_L4_error)
+10174:                 raise c_err_to_py(err)
      __pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10174, __pyx_L4_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(0, 10174, __pyx_L4_error)
+10175:             db._conf_str = conf_str
    __Pyx_INCREF(__pyx_v_conf_str);
    __Pyx_GIVEREF(__pyx_v_conf_str);
    __Pyx_GOTREF(__pyx_v_db->_conf_str);
    __Pyx_DECREF(__pyx_v_db->_conf_str);
    __pyx_v_db->_conf_str = __pyx_v_conf_str;
+10176:             db._cb_refs_key = _retain_callback_refs(
    __pyx_t_10 = __pyx_f_7questdb_7_client__retain_callback_refs(((PyObject *)__pyx_v_db), __pyx_t_3); if (unlikely(__pyx_t_10 == ((size_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 10176, __pyx_L4_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_db->_cb_refs_key = __pyx_t_10;
+10177:                 db, db._dispatch_context)
    __pyx_t_3 = __pyx_v_db->_dispatch_context;
    __Pyx_INCREF(__pyx_t_3);
+10178:             return db
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_db);
    __pyx_r = ((PyObject *)__pyx_v_db);
    goto __pyx_L3_return;
  }
 10179:         finally:
+10180:             _ensure_has_gil(&gs)
  /*finally:*/ {
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 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_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25);
      if ( unlikely(__Pyx_GetException(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22) < 0)) __Pyx_ErrFetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
      __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_XGOTREF(__pyx_t_25);
      __pyx_t_13 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_19 = __pyx_filename;
      {
        __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
/* … */
      __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+10181:             qdb_pystr_buf_free(b)
        qdb_pystr_buf_free(__pyx_v_b);
/* … */
      qdb_pystr_buf_free(__pyx_v_b);
+10182:             _oidc_raise_unscheduled_main()
        __pyx_t_6 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_6 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10182, __pyx_L55_error)
      }
      __Pyx_XGIVEREF(__pyx_t_23);
      __Pyx_XGIVEREF(__pyx_t_24);
      __Pyx_XGIVEREF(__pyx_t_25);
      __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_24, __pyx_t_25);
      __Pyx_XGIVEREF(__pyx_t_20);
      __Pyx_XGIVEREF(__pyx_t_21);
      __Pyx_XGIVEREF(__pyx_t_22);
      __Pyx_ErrRestore(__pyx_t_20, __pyx_t_21, __pyx_t_22);
      __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0;
      __pyx_lineno = __pyx_t_13; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_19;
      goto __pyx_L1_error;
      __pyx_L55_error:;
      __Pyx_XGIVEREF(__pyx_t_23);
      __Pyx_XGIVEREF(__pyx_t_24);
      __Pyx_XGIVEREF(__pyx_t_25);
      __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_24, __pyx_t_25);
      __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
      __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
      __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
      __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L3_return: {
      __pyx_t_25 = __pyx_r;
      __pyx_r = 0;
/* … */
      __pyx_t_6 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_6 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10182, __pyx_L1_error)
      __pyx_r = __pyx_t_25;
      __pyx_t_25 = 0;
      goto __pyx_L0;
    }
  }
 10183: 
+10184:     def __enter__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_7__enter__(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_7QuestDB_7__enter__ = {"__enter__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_7__enter__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_7__enter__(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
) {
  #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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__enter__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__enter__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_6__enter__(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_6__enter__(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
  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_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("questdb._client.QuestDB.__enter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_7__enter__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB___enter, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[211])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10184, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_enter, __pyx_t_4) < (0)) __PYX_ERR(0, 10184, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+10185:         self._state_cond.acquire()
  __pyx_t_2 = __pyx_v_self->_state_cond;
  __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_acquire, __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(0, 10185, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+10186:         try:
  /*try:*/ {
+10187:             if self._db == NULL:
    __pyx_t_4 = (__pyx_v_self->_db == NULL);
    if (unlikely(__pyx_t_4)) {
/* … */
    }
+10188:                 raise QuestDBError(
      __pyx_t_2 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 10188, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_5);
+10189:                     QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 10189, __pyx_L4_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(0, 10189, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __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] = {__pyx_t_2, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_enter___can_t_be_called_QuestD};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __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_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10188, __pyx_L4_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(0, 10188, __pyx_L4_error)
 10190:                     '__enter__() can\'t be called: QuestDB is closed.')
+10191:             if self._closing:
    if (unlikely(__pyx_v_self->_closing)) {
/* … */
    }
  }
+10192:                 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(0, 10192, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_7);
+10193:                     QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10193, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 10193, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_3 = 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_3 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_enter___can_t_be_called_QuestD_2};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (__pyx_t_3*__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(0, 10192, __pyx_L4_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(0, 10192, __pyx_L4_error)
 10194:                     '__enter__() can\'t be called: QuestDB is closing. '
 10195:                     'close() has been called, and the handle takes no '
 10196:                     'new work while calls in progress and outstanding '
 10197:                     'leases finish.')
 10198:         finally:
+10199:             self._state_cond.release()
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_7 = __pyx_v_self->_state_cond;
      __Pyx_INCREF(__pyx_t_7);
      __pyx_t_3 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
        __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10199, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 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_14, &__pyx_t_15, &__pyx_t_16);
      if ( unlikely(__Pyx_GetException(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13) < 0)) __Pyx_ErrFetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_14);
      __Pyx_XGOTREF(__pyx_t_15);
      __Pyx_XGOTREF(__pyx_t_16);
      __pyx_t_8 = __pyx_lineno; __pyx_t_9 = __pyx_clineno; __pyx_t_10 = __pyx_filename;
      {
        __pyx_t_7 = __pyx_v_self->_state_cond;
        __Pyx_INCREF(__pyx_t_7);
        __pyx_t_3 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
          __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10199, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_1);
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __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_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ErrRestore(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
      __pyx_lineno = __pyx_t_8; __pyx_clineno = __pyx_t_9; __pyx_filename = __pyx_t_10;
      goto __pyx_L1_error;
      __pyx_L9_error:;
      __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_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_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }
+10200:         return self
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;
 10201: 
+10202:     def sender(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_9sender(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_7QuestDB_8sender, "\n        Borrow a context-managed row-building sender from the pool.\n\n        The lease counts as an active use of the handle until it is\n        closed: :meth:`QuestDB.close` waits for outstanding leases for as\n        long as its ``timeout`` allows (a minute by default -- see\n        :meth:`close <QuestDB.close>`), and a lease keeps working while\n        the handle drains -- apart from :meth:`PooledSender.dataframe`,\n        which is new work on the handle and is refused once ``close()``\n        has started.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_7QuestDB_9sender = {"sender", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_9sender, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_8sender};
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_9sender(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
) {
  #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("sender (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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("sender", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("sender", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_8sender(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_8sender(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
  struct questdb_db *__pyx_v_db;
  struct qwp_sender *__pyx_v_sender;
  struct line_sender_error *__pyx_v_err;
  struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer = 0;
  struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_lease = 0;
  PyThreadState *__pyx_v_gs;
  int __pyx_v_db_use;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client.QuestDB.sender", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_buffer);
  __Pyx_XDECREF((PyObject *)__pyx_v_lease);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_9sender, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB_sender, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[212])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_sender, __pyx_t_4) < (0)) __PYX_ERR(0, 10202, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 10203:         """
 10204:         Borrow a context-managed row-building sender from the pool.
 10205: 
 10206:         The lease counts as an active use of the handle until it is
 10207:         closed: :meth:`QuestDB.close` waits for outstanding leases for as
 10208:         long as its ``timeout`` allows (a minute by default -- see
 10209:         :meth:`close <QuestDB.close>`), and a lease keeps working while
 10210:         the handle drains -- apart from :meth:`PooledSender.dataframe`,
 10211:         which is new work on the handle and is refused once ``close()``
 10212:         has started.
 10213:         """
+10214:         cdef questdb_db* db = NULL
  __pyx_v_db = NULL;
+10215:         cdef qwp_sender* sender = NULL
  __pyx_v_sender = NULL;
+10216:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+10217:         cdef Buffer buffer = None
  __Pyx_INCREF(Py_None);
  __pyx_v_buffer = ((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None);
+10218:         cdef PooledSender lease = None
  __Pyx_INCREF(Py_None);
  __pyx_v_lease = ((struct __pyx_obj_7questdb_7_client_PooledSender *)Py_None);
+10219:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+10220:         cdef bint db_use = False
  __pyx_v_db_use = 0;
+10221:         db = self._begin_db_use('sender', scoped=False)
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.scoped = 0;
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_sender, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 10221, __pyx_L1_error)
  __pyx_v_db = __pyx_t_1;
+10222:         db_use = True
  __pyx_v_db_use = 1;
+10223:         try:
  /*try:*/ {
+10224:             _ensure_doesnt_have_gil(&gs)
    (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+10225:             sender = questdb_db_borrow_sender(db, &err)
    __pyx_v_sender = questdb_db_borrow_sender(__pyx_v_db, (&__pyx_v_err));
+10226:             _ensure_has_gil(&gs)
    __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+10227:             if sender == NULL:
    __pyx_t_3 = (__pyx_v_sender == NULL);
    if (unlikely(__pyx_t_3)) {
/* … */
    }
+10228:                 raise c_err_to_py(err)
      __pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10228, __pyx_L4_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(0, 10228, __pyx_L4_error)
 10229: 
+10230:             buffer = Buffer.__new__(Buffer)
    __pyx_t_4 = ((PyObject *)__pyx_tp_new_7questdb_7_client_Buffer(((PyTypeObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer), __pyx_mstate_global->__pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10230, __pyx_L4_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_4);
    __Pyx_DECREF_SET(__pyx_v_buffer, ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_4));
    __pyx_t_4 = 0;
+10231:             buffer._impl = questdb_db_new_buffer(db, &err)
    __pyx_v_buffer->_impl = questdb_db_new_buffer(__pyx_v_db, (&__pyx_v_err));
+10232:             if buffer._impl == NULL:
    __pyx_t_3 = (__pyx_v_buffer->_impl == NULL);
    if (unlikely(__pyx_t_3)) {
/* … */
    }
+10233:                 raise c_err_to_py(err)
      __pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10233, __pyx_L4_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(0, 10233, __pyx_L4_error)
+10234:             buffer._b = qdb_pystr_buf_new()
    __pyx_v_buffer->_b = qdb_pystr_buf_new();
+10235:             buffer._init_buf_size = line_sender_buffer_capacity(buffer._impl)
    __pyx_v_buffer->_init_buf_size = line_sender_buffer_capacity(__pyx_v_buffer->_impl);
+10236:             buffer._max_name_len = questdb_db_buffer_max_name_len(db)
    __pyx_v_buffer->_max_name_len = questdb_db_buffer_max_name_len(__pyx_v_db);
+10237:             buffer._qwp = True
    __pyx_v_buffer->_qwp = 1;
 10238: 
+10239:             lease = PooledSender.__new__(PooledSender)
    __pyx_t_4 = ((PyObject *)__pyx_tp_new_7questdb_7_client_PooledSender(((PyTypeObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender), __pyx_mstate_global->__pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10239, __pyx_L4_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_4);
    __Pyx_DECREF_SET(__pyx_v_lease, ((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_t_4));
    __pyx_t_4 = 0;
+10240:             lease._attach(self, db, sender, buffer)
    ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_lease->__pyx_vtab)->_attach(__pyx_v_lease, __pyx_v_self, __pyx_v_db, __pyx_v_sender, __pyx_v_buffer);
+10241:             sender = NULL
    __pyx_v_sender = NULL;
+10242:             db_use = False
    __pyx_v_db_use = 0;
+10243:             return lease
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_lease);
    __pyx_r = ((PyObject *)__pyx_v_lease);
    goto __pyx_L3_return;
  }
 10244:         finally:
+10245:             _ensure_has_gil(&gs)
  /*finally:*/ {
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
      if ( unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __pyx_t_5 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_7 = __pyx_filename;
      {
        __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
/* … */
      __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+10246:             if sender != NULL:
        __pyx_t_3 = (__pyx_v_sender != NULL);
        if (__pyx_t_3) {
/* … */
        }
/* … */
      __pyx_t_3 = (__pyx_v_sender != NULL);
      if (__pyx_t_3) {
/* … */
      }
+10247:                 questdb_db_return_sender(db, sender)
          questdb_db_return_sender(__pyx_v_db, __pyx_v_sender);
/* … */
        questdb_db_return_sender(__pyx_v_db, __pyx_v_sender);
+10248:             if db_use:
        if (__pyx_v_db_use) {
/* … */
        }
/* … */
      if (__pyx_v_db_use) {
/* … */
      }
+10249:                 self._end_db_use(scoped=False)
          __pyx_t_14.__pyx_n = 1;
          __pyx_t_14.scoped = 0;
          ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, &__pyx_t_14); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10249, __pyx_L9_error)
/* … */
        __pyx_t_14.__pyx_n = 1;
        __pyx_t_14.scoped = 0;
        ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, &__pyx_t_14); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10249, __pyx_L1_error)
+10250:             _oidc_raise_unscheduled_main()
        __pyx_t_15 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_15 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10250, __pyx_L9_error)
      }
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_ErrRestore(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      __pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_7;
      goto __pyx_L1_error;
      __pyx_L9_error:;
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      __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;
      __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L3_return: {
      __pyx_t_13 = __pyx_r;
      __pyx_r = 0;
/* … */
      __pyx_t_15 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_15 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10250, __pyx_L1_error)
      __pyx_r = __pyx_t_13;
      __pyx_t_13 = 0;
      goto __pyx_L0;
    }
  }
 10251: 
+10252:     def dataframe(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_11dataframe(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_7QuestDB_10dataframe, "\n        Ingest a dataframe through the pooled columnar QWP path.\n\n        Ingestion always uses the direct (non-store-and-forward) column\n        sender, independent of ``sf_dir``. On success, the call returns only\n        after every DataFrame batch has been committed. The first successful\n        batch on a fresh direct connection is already a commit boundary;\n        subsequent batches are pipelined until the final commit. Large Arrow\n        inputs add a checkpoint about every 100 batches to bound the\n        uncommitted tail. The client may checkpoint earlier if deferred\n        capacity fills or a batch must be split to fit.\n\n        On a transient connection failure, the client re-sends the original,\n        replayable DataFrame only when no batch was successfully published and\n        the failed operation is not ``in_doubt``. Otherwise it raises rather\n        than replaying from row zero. If a batch from this call may have\n        committed, the raised error has ``in_doubt=True`` even when the final\n        native write alone was provably not delivered. This includes local\n        validation and Arrow stream errors after publication. Internal\n        checkpoints do not reset the call's delivery status. The load did not\n        finish, but any already committed prefix remains; an application-level\n        retry of the whole DataFrame can duplicate it unless the destination\n        table uses suitable ``DEDUP UPSERT KEYS``. A consumed one-shot stream\n        may instead be non-replayable with ``in_doubt=False`` when no rows\n        could have landed; that error asks for a fresh reader. Server-side\n        rejections (e.g. a\n        schema mismatch) surface as a plain\n        :class:`QuestDBError`; the structured ``sender_error`` diagnostic\n        is attached only by the store-and-forward senders.\n\n        ``df`` accepts any of:\n\n        - **pandas** ``pandas.DataFrame``. NumPy-backed columns route\n          through the legac""y planner; pyarrow-backed columns route\n          through the Arrow C Stream capsule path below.\n        - **polars** ``polars.DataFrame`` and ``polars.LazyFrame``\n          (polars 1.32 or later). ``LazyFrame`` is materialised via\n          ``.collect(engine='streaming')``.\n        - **pyarrow** ``pa.Table``, ``pa.RecordBatch``, and\n          ``pa.RecordBatchReader``.\n        - Any object exposing the Arrow C Data Interface \342\200\224 i.e. with\n          ``__arrow_c_stream__`` (duckdb / cudf / pyarrow-backed\n          pandas 2.2+) or ``__arrow_c_array__`` (single Arrow array\n          exporters, wrapped into a one-batch ``pa.Table``).\n\n        ``at`` names the designated timestamp column (by name or index).\n        Alternatively pass a fixed ``TimestampNanos`` / ``datetime``\n        shared by every row (encoded as a repeated constant; resubmission\n        stays idempotent under ``DEDUP UPSERT KEYS``), or the explicit\n        :data:`ServerTimestamp` sentinel to let the server assign each\n        row's timestamp on arrival \342\200\224 an opt-in mirroring the row API,\n        since server-assigned timestamps defeat ``DEDUP UPSERT KEYS`` on\n        resubmission.\n\n        The columnar path loads one table per call: name it via\n        ``table_name`` \342\200\224 or, for NumPy-backed pandas input, the\n        dataframe's index name (``df.index.name``); Arrow-native input\n        (polars, pyarrow, pyarrow-backed pandas) requires an explicit\n        ``table_name``. ``table_name_col`` raises\n        :class:`UnsupportedDataFrameShapeError` \342\200\224 split multi-table\n        frames (e.g. ``df.groupby(col)``) and load each group.\n\n        Supports a column-QWP v1 subset: a single per-call table name,\n        non-null designated timestamp column, and the following\n        per-column dtypes:\n\n        - **Numeric**: NumPy ``bool/int{8,16,32,64}/uint{8..64}/float{32,64}``.\n          Arrow ``pa.int{8,16,32,64}``, ``pa.float{16,32,64}``, and""\n          ``pa.uint{8,16,32,64}`` are accepted by the Rust Arrow batch route\n          when the frame uses a fixed table name and a designated timestamp\n          column name. Unsigned Arrow values follow the\n          Rust Arrow policy: ``UInt8`` and ``UInt16`` widen to ``INT``,\n          ``UInt32`` to ``LONG``, and ``UInt64`` values up to\n          ``i64::MAX`` are accepted as ``LONG``. Larger ``UInt64`` values are\n          rejected because QuestDB QWP-WS encodes integers as signed ``i64``.\n          Signed ``int8``/``int16`` land as QuestDB ``INT``; the row-oriented\n          :meth:`Sender.dataframe` instead widens every integer to ``LONG``.\n          Likewise ``float32`` lands here as ``FLOAT`` but is widened to\n          ``DOUBLE`` by the row path \342\200\224 ingest a given table through a single\n          path to avoid a first-write column-type mismatch.\n        - **String / Symbol**: object-dtype ``str``, ``pa.string()``,\n          ``pa.large_string()``, ``pd.CategoricalDtype`` of strings.\n        - **Timestamp**: NumPy ``datetime64`` units accepted by pandas and\n          ``pa.timestamp`` with unit ``s``, ``us``, or ``ns`` (tz-aware\n          accepted on Arrow-backed columns in the Rust Arrow route). An\n          Arrow ``ms`` timestamp field lands as DATE instead \342\200\224 see\n          **DATE** below \342\200\224 while a NumPy ``datetime64[ms]`` field is\n          widened to a microsecond TIMESTAMP unless a\n          ``df.attrs['questdb']`` claim names it DATE.\n          Timestamp *field* columns accept null timestamps (``NaT`` /\n          ``None``) and values before the Unix epoch; a ``datetime64[ns]``\n          field carrying ``NaT`` is re-exported through Arrow so its\n          ``INT64_MIN`` null sentinel is preserved (this needs pyarrow).\n          The *designated* timestamp column (``at=``) must be non-null\n          and at or after the epoch.\n        - **Decimal**: Arrow-backed ``pa.decimal{32,64,128,256}`` columns""\n          (``pa.decimal32``/``pa.decimal64`` require pyarrow >= 19), or\n          object-dtype columns of ``decimal.Decimal`` (re-exported through\n          Arrow; the decimal width and scale are inferred from the values).\n        - **Array**: Arrow ``pa.list_`` / ``pa.large_list`` /\n          ``pa.fixed_size_list`` columns with a ``float64`` leaf (nested for\n          multi-dimensional), and object-dtype columns of ``float64``\n          ``numpy.ndarray`` cells (any rank; requires pyarrow). Both land as\n          QuestDB ``ARRAY(DOUBLE)``. Null rows are allowed; null *elements*\n          inside an array are not.\n        - **UUID**: object-dtype columns of ``uuid.UUID``, the\n          ``arrow.uuid`` extension type over ``pa.fixed_size_binary(16)``,\n          or any 16-byte binary column claimed with\n          ``schema_overrides={'col': 'uuid'}``. Bytes are **canonical\n          RFC 4122 big-endian** \342\200\224 exactly ``uuid.UUID.bytes`` \342\200\224 and the\n          client byte-swaps them into QWP wire order. Round-trip through\n          :meth:`query <questdb.QuestDB.query>` is byte-identity.\n\n          The ``arrow.uuid`` route requires pyarrow >= 18, which is where\n          that canonical extension type is registered, and the column\n          must carry the extension **type** \342\200\224 build it from ``pa.uuid()``.\n          Writing ``ARROW:extension:name`` as plain field metadata is not\n          equivalent: pyarrow leaves such a key on the field, and a\n          pandas ``ArrowDtype`` carries a type and no field, so a frame\n          built that way holds a bare ``pa.fixed_size_binary(16)`` and\n          is refused as unlabelled \342\200\224 see **Binary** below. Frames\n          imported over the C data interface or Arrow IPC do get the\n          extension type rebuilt from that key, which is why the same\n          metadata can route two ways. The other two routes \342\200\224\n          ``uuid.UUID`` cells and ``schema_overrides""`` \342\200\224 are free of both\n          conditions, and a ``{'kind': 'uuid'}`` entry in\n          ``df.attrs['questdb']`` claims an object-dtype column of\n          16-byte ``bytes``, the shape\n          ``to_pandas(dtype_backend='numpy_nullable')`` returns. On\n          pyarrow < 18, where no column can carry the label at all, a\n          pandas frame's bare ``pa.fixed_size_binary(16)`` column is\n          still refused rather than quietly landing as BINARY.\n        - **LONG256**: 32-byte binary columns. Bytes are little-endian\n          limbs, least-significant limb first, forwarded verbatim. Three\n          routes claim the type, and they need different inputs.\n          ``schema_overrides={'col': 'long256'}`` needs a fully\n          Arrow-backed frame \342\200\224 every column an ArrowDtype, e.g.\n          ``df.convert_dtypes(dtype_backend='pyarrow')``.\n          ``questdb.column_type=long256`` *field* metadata needs a\n          ``pa.Table`` or ``pa.RecordBatch`` handed straight to this\n          method: field metadata lives on the field, a pandas\n          ``ArrowDtype`` carries a type and no field, so a column that\n          passed through pandas has already lost the claim. A\n          ``{'kind': 'long256'}`` entry in ``df.attrs['questdb']`` claims\n          an object-dtype column of Python ints or of 32-byte ``bytes``\n          \342\200\224 the two shapes :meth:`QueryResult.to_pandas` hands a LONG256\n          column back in, plain and ``dtype_backend='numpy_nullable'``\n          respectively. Ints are encoded as 32 unsigned little-endian\n          bytes, so every non-null value must satisfy\n          ``0 <= value < 2**256``; ``bytes`` cells go out verbatim and\n          must be exactly 32 bytes. LONG256 has no Arrow extension type,\n          so a ``pa.fixed_size_binary(32)`` column in a pandas frame\n          claims nothing by itself and is refused rather than sent as\n          opaque bytes \342\200\224 see **Binary** below fo""r why pandas frames\n          refuse where native Arrow input writes BINARY.\n        - **Binary**: object-dtype columns of ``bytes``, ``bytearray``, or\n          C-contiguous one-byte-item ``memoryview`` cells land as BINARY,\n          the same value types :func:`Buffer.row <questdb.ingress.Buffer.row>`\n          accepts. Arrow ``pa.binary()``, ``pa.large_binary()``, and\n          ``pa.fixed_size_binary(n)`` columns also land as BINARY, with\n          the exception and the condition below.\n\n          The exception is ``pa.fixed_size_binary(8)``, which both\n          planners refuse with ``ArrowUnsupportedColumnKind``, labelled\n          or not. polars exports its ``Object`` dtype in exactly that\n          shape, as handles to objects in its own process rather than\n          data, and once exported nothing else marks it. To store\n          genuine 8-byte values as BINARY, make the column\n          variable-length binary: ``pa.binary()``, ``pl.Binary``, or an\n          object column of ``bytes``.\n\n          The condition is on widths 16 and 32. A width on its own\n          claims nothing: such a column is a UUID or a LONG256 only when\n          something labels it \342\200\224 ``pa.uuid()``, ``questdb.column_type``\n          field metadata of ``uuid`` or ``long256``, ``schema_overrides``,\n          or a ``df.attrs['questdb']`` claim. Any other extension type,\n          or any other ``questdb.column_type`` value, leaves the column\n          unlabelled \342\200\224 except ``binary``, which, like\n          ``schema_overrides={'col': 'binary'}``, labels it as plain bytes.\n          What happens to an unlabelled\n          one depends on where it comes from, not on which planner\n          writes it. Native Arrow input \342\200\224 a ``pa.Table``,\n          ``pa.RecordBatch``, ``pa.RecordBatchReader``, or any other\n          ``__arrow_c_stream__`` producer \342\200\224 keeps its field metadata, so\n          an unlabelled column there is written"" as BINARY, and once the\n          write is done the ``questdb`` logger records one WARNING per\n          such column naming the remedies. A pandas frame refuses it with ``BadDataFrame``,\n          fully Arrow-backed or not: an ``ArrowDtype`` carries a type and\n          no field, so the column may be a UUID or LONG256 column whose\n          label was dropped on the way into pandas, and guessing would\n          auto-create a table with the wrong column type. The refusal\n          does not depend on the pyarrow version \342\200\224 which remedies the\n          message can name does, since ``pa.uuid()`` needs pyarrow 18,\n          but which columns are accepted does not. To write either width\n          as BINARY without the warning or the refusal, label it as\n          plain bytes \342\200\224 ``schema_overrides={'col': 'binary'}``, or\n          ``{\"questdb.column_type\": \"binary\"}`` field metadata on native\n          Arrow input \342\200\224 which sends it as it is, with no copy. Making the\n          column variable-length binary (``pa.binary()``,\n          ``pd.ArrowDtype(pa.binary())``) or, in pandas, an object-dtype\n          column of ``bytes`` works too, at the cost of a copy. Requires\n          QuestDB 10 or newer.\n        - **DATE**: Arrow ``pa.timestamp('ms')`` (tz-aware or naive),\n          ``pa.date32()``, and ``pa.date64()`` columns land as DATE. The\n          Arrow type is itself the claim, so there is no DATE cell type\n          and no ``'date'`` kind for ``schema_overrides``. Such a column\n          lands as DATE whether the frame is fully Arrow-backed or mixed\n          with NumPy columns. What has no route of its own to DATE is\n          the NumPy ``datetime64[ms]`` dtype, which widens to a\n          microsecond TIMESTAMP, and its tz-aware ``datetime64[ms, tz]``\n          form, which is rejected outright. A millisecond column named\n          by ``at=`` becomes the table's designated TIMESTAMP, like any\n          other ``""at`` column. Round-tripping keeps the type: :meth:`query\n          <questdb.QuestDB.query>` returns a DATE column as\n          ``pa.timestamp('ms', 'UTC')``, which ``to_arrow()`` and\n          ``to_pandas(dtype_backend='pyarrow')`` feed straight back as\n          DATE. Plain ``to_pandas()`` gives a NumPy ``datetime64[ms]``\n          column, and the ``df.attrs['questdb']`` claim it comes with\n          names the column DATE, so this method puts the Arrow type back\n          on before writing and that frame lands as DATE too.\n          Row-at-a-time, DATE is written with :class:`DateMillis\n          <questdb.DateMillis>` through :func:`Buffer.row\n          <questdb.ingress.Buffer.row>`.\n\n        Server-side coercion handles cross-type writes (e.g. ``pa.string()``\n        UUIDs landing in a UUID column are parsed server-side; narrow ints\n        landing in a wider column are widened). Failures surface as\n        ``QuestDBError`` from the ``flush()``.\n\n        ``schema_overrides`` reclassifies columns by name, mapping each to\n        ``'symbol'``, ``'ipv4'``, ``'char'``, ``'uuid'``, ``'long256'``,\n        ``'binary'``, or ``('geohash', bits)`` (e.g.\n        ``{'venue': 'symbol', 'src_ip': 'ipv4'}``). Unknown column names are\n        rejected. An override wins over any Arrow field metadata on its\n        column, except ``'binary'``, which is refused on a column whose\n        own type or field metadata labels it UUID or LONG256. ``'uuid'`` and ``'long256'`` apply to fixed-size and\n        variable-length binary columns alike \342\200\224 the route polars frames take,\n        since polars has no fixed-size binary dtype \342\200\224 and every non-null\n        value must be exactly 16 or 32 bytes respectively. ``'binary'``\n        applies to binary columns and says a 16- or 32-byte column holds\n        plain bytes (see **Binary** above); it cannot override a\n        ``pa.uuid()`` type or a ``uuid`` / ``long256`` field label, and\n        is refus""ed on such a column. It requires the\n        Arrow columnar path (fully Arrow-backed input without\n        ``table_name_col``; pandas input needs pandas 2.2 or later); on\n        input that falls back to the NumPy planner\n        it raises :class:`UnsupportedDataFrameShapeError`.\n\n        A pandas frame that came out of :meth:`QueryResult.to_pandas`\n        carries its source column types in ``df.attrs['questdb']``, and\n        this method reads them back. That is what keeps UUID, LONG256,\n        IPV4, CHAR, GEOHASH, and DATE columns their own type on a\n        read-modify-write round trip: their claim lives in Arrow *field*\n        metadata, which a pandas dtype \342\200\224 an Arrow type and no field \342\200\224\n        cannot hold. The metadata recalls what the frame held when it was\n        read, so a column since dropped, renamed, or retyped simply loses\n        its claim, and ``symbols`` / ``schema_overrides`` outrank it.\n        BYTE, SHORT, and INT columns still widen one step on the way back\n        in; the Arrow ingest API has no override that pins them.\n\n        The claim is honoured on every shape a ``to_pandas`` backend\n        produces, so plain ``to_pandas()``,\n        ``dtype_backend='pyarrow'`` and ``dtype_backend='numpy_nullable'``\n        round-trip the same way. Besides the Arrow-backed and plain NumPy\n        columns, that covers the object columns the other backends leave\n        behind: Python ints, which is what a pandas masked column becomes\n        and what plain ``to_pandas()`` returns a LONG256 as, and\n        ``bytes``, which is how ``dtype_backend='numpy_nullable'``\n        returns UUID and LONG256. Frames saved from version 5.0, whose\n        plain ``to_pandas()`` returned a GEOHASH column as an unsigned\n        integer, round-trip too: such a column is written as the signed\n        integer of the same width, bit for bit. A frame whose columns\n        were retyped past that set \342\200\224 which a custo""m ``types_mapper`` can\n        do \342\200\224 keeps the claim in ``attrs`` and cannot use it: a claimed\n        column that arrives as a float or a string dtype lands as that\n        dtype implies, and the claim it could not use is reported as a\n        warning-level record on the ``questdb`` logger. An object column\n        states no width or range of its own, so a claimed value the type\n        cannot hold \342\200\224 an integer past ``2**32-1`` under ``ipv4``, a cell\n        that is not exactly 16 or 32 bytes under ``uuid`` or ``long256``\n        \342\200\224 is refused rather than written into a column of the claimed\n        type. GEOHASH is the deliberate exception, described next.\n\n        Bulk GEOHASH values are raw bit patterns, whatever the column is\n        stored as: NumPy, Arrow, or an object column of Python ints,\n        which is also what a pandas masked column becomes. This is a\n        deliberate contract, the same for every shape, so that whether a\n        frame is written does not depend on whether a GEOHASH column\n        holds a null; plain :meth:`QueryResult.to_pandas` returns a\n        column that does as a masked column. The declared precision\n        must be in ``1..=60`` and fit the signed integer carrier, but no\n        per-value check verifies that the pattern has no bits set above\n        that precision. For example, ``32`` under ``GEOHASH(5b)`` is\n        accepted even though it needs six bits. If the declared precision\n        is wrong for the data, the write can succeed and store a different\n        GEOHASH location or ``NULL``. Only the low\n        ``ceil(precision / 8)`` bytes are encoded, and the exact result of\n        an inconsistent value is unspecified. This is a semantic\n        data-integrity risk, not a memory-safety risk for otherwise valid\n        NumPy/Arrow buffers. The caller must validate bulk values. The\n        scalar :class:`Geohash <questdb.Geohash>` constructor remains\n        strict""; malformed custom Arrow C Data structures remain invalid\n        input and are outside this guarantee.\n\n        A column of nothing but nulls names no type of its own, and\n        without a claim it is left out of the write and out of the\n        table the write auto-creates. A claim names one, so a claimed\n        all-null column is written as the claimed type \342\200\224 which is what\n        keeps a batch that happens to hold no value for one column from\n        deciding the shape of the table.\n\n        The claim a query result carries reads as an ordinary mapping\n        but cannot be edited in place, because every copy of the frame\n        shares it; assign a new mapping to ``df.attrs['questdb']`` to\n        change it. A plain hand-written ``dict`` is read here just the\n        same, in this shape:\n\n        .. code-block:: python\n\n            df.attrs['questdb'] = {\n                'version': 1,\n                'columns': {\n                    'src_ip': {'kind': 'ipv4'},\n                    'pos': {'kind': 'geohash', 'precision_bits': 20},\n                    'traded_on': {'kind': 'date'},\n                },\n            }\n\n        ``version`` must be ``1`` when present, and a mapping without it\n        reads as version 1. The claim's vocabulary can gain kinds, and a\n        client applying a version it does not understand would write the\n        wrong column type, which is the outcome the claim exists to\n        prevent, so a mapping carrying any other version is not read and\n        every column in it is ignored. A claim, or a column's entry in\n        it, that is not read is reported through the ``questdb`` logger;\n        the write goes ahead either way. ``kind`` is one of\n        ``'uuid'``, ``'long256'``, ``'ipv4'``, ``'char'``, ``'geohash'``,\n        or ``'date'`` \342\200\224 the types whose claim cannot always ride on a pandas\n        dtype. ``precision_bits`` accompanies ``'geohash'`` alone. A\n        ``'date'`` ""claim restores the DATE type after plain pandas has\n        represented it as NumPy ``datetime64[ms]``. Naming a column that is\n        not in the frame is not an error; the entry is skipped.\n\n        A ``pa.Table`` or ``pa.RecordBatch`` from\n        :meth:`QueryResult.to_arrow` or :meth:`QueryResult.iter_arrow`\n        carries the same claims in Arrow field metadata, as a\n        ``questdb.column_type`` key on every field, and this method\n        passes that metadata to the native client unchanged. A field\n        claim the field's Arrow type cannot carry \342\200\224 ``'short'`` on\n        ``pa.int32()``, ``'ipv4'`` on ``pa.int64()`` \342\200\224 makes this method\n        raise :class:`QuestDBError <questdb.QuestDBError>`, with ``code``\n        set to ``QuestDBErrorCode.ArrowIngest``, before anything is sent.\n        This stricter rule is deliberate. Field metadata is the input\n        contract of the native Arrow ingest, which refuses such a field\n        in every language that uses it. A field claim also goes stale\n        only when the old field is carried onto a new type: ``Table.cast``\n        with a schema built from ``field.with_type(...)``, or\n        ``pa.concat_tables(..., promote_options='permissive')`` with the\n        claimed table first. Casting to a schema built from scratch,\n        ``set_column`` by name, and a polars or pandas round trip all\n        build fields without the key. ``df.attrs`` belongs to the whole\n        frame and survives ``astype`` and arithmetic, so a stale claim\n        there is the normal case and is logged instead. To write a\n        retyped column, drop its metadata:\n\n        .. code-block:: python\n\n            i = table.schema.get_field_index('col')\n            table = table.cast(table.schema.set(\n                i, table.schema.field(i).remove_metadata()))\n\n        ``max_rows_per_batch`` sets the pipelining granularity, not a\n        safety limit: any batch exceeding the negotiated per-bat""ch byte\n        cap is split regardless of it, and a single row is never bounded\n        by it. Each batch is one unit of client memory and server-side\n        apply. The first successful batch on a fresh connection is a commit\n        boundary. Sliceable Arrow inputs add another checkpoint about every\n        100 batches, so ``max_rows_per_batch * 100`` rows approximates the\n        maximum periodic uncommitted tail, not a whole-source replay window.\n        The NumPy planner pipelines the remaining batches until its final\n        commit. Either path may checkpoint earlier when deferred capacity\n        fills. Raise ``max_rows_per_batch`` for narrow numeric\n        rows; lower it for very wide rows or tight memory. Streaming Arrow\n        input (``pa.RecordBatchReader``) is not re-batched \342\200\224 the producer's\n        batch size governs its checkpoint window.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_7QuestDB_11dataframe = {"dataframe", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_11dataframe, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_10dataframe};
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_11dataframe(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_df = 0;
  PyObject *__pyx_v_table_name = 0;
  PyObject *__pyx_v_table_name_col = 0;
  PyObject *__pyx_v_symbols = 0;
  PyObject *__pyx_v_at = 0;
  PyObject *__pyx_v_max_rows_per_batch = 0;
  PyObject *__pyx_v_schema_overrides = 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("dataframe (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_df_2,&__pyx_mstate_global->__pyx_n_u_at,&__pyx_mstate_global->__pyx_n_u_table_name,&__pyx_mstate_global->__pyx_n_u_table_name_col,&__pyx_mstate_global->__pyx_n_u_symbols,&__pyx_mstate_global->__pyx_n_u_max_rows_per_batch,&__pyx_mstate_global->__pyx_n_u_schema_overrides_2,0};
  PyObject* values[7] = {0,0,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(0, 10252, __pyx_L3_error)
    if (likely(__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(0, 10252, __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, "dataframe", 0) < (0)) __PYX_ERR(0, 10252, __pyx_L3_error)
/* … */
  /* 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_7QuestDB_10dataframe(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self, PyObject *__pyx_v_df, PyObject *__pyx_v_table_name, PyObject *__pyx_v_table_name_col, PyObject *__pyx_v_symbols, PyObject *__pyx_v_at, PyObject *__pyx_v_max_rows_per_batch, PyObject *__pyx_v_schema_overrides) {
  struct qdb_pystr_buf *__pyx_v_b;
  struct __pyx_t_7questdb_7_client_dataframe_plan_t __pyx_v_plan;
  struct questdb_db *__pyx_v_db;
  int __pyx_v_db_use;
  struct __pyx_t_7questdb_7_client_direct_conn_source_t __pyx_v_src;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client.QuestDB.dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_4 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10252, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
/* … */
  __pyx_t_25 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 10252, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_table_name, __pyx_mstate_global->__pyx_kp_u_Optional_str) < (0)) __PYX_ERR(0, 10252, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_table_name_col, __pyx_mstate_global->__pyx_kp_u_Union_None_int_str) < (0)) __PYX_ERR(0, 10252, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_kp_u_Union_str_bool_List_int_List_str) < (0)) __PYX_ERR(0, 10252, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_at, __pyx_mstate_global->__pyx_kp_u_Union_ServerTimestampType_int_st) < (0)) __PYX_ERR(0, 10252, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_max_rows_per_batch, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 10252, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_schema_overrides_2, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_object) < (0)) __PYX_ERR(0, 10252, __pyx_L1_error)
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_11dataframe, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB_dataframe, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[213])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 10252, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_17, __pyx_t_4);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_17, __pyx_t_25);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_dataframe, __pyx_t_17) < (0)) __PYX_ERR(0, 10252, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 10253:             self,
 10254:             df,
 10255:             *,
+10256:             table_name: Optional[str] = None,
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_table_name, Py_None) < (0)) __PYX_ERR(0, 10252, __pyx_L1_error)
+10257:             table_name_col: Union[None, int, str] = None,
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_n_u_auto));
      if (!values[5]) values[5] = __Pyx_NewRef(__pyx_mstate_global->__pyx_k__38);
/* … */
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_table_name_col, Py_None) < (0)) __PYX_ERR(0, 10252, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_n_u_auto) < (0)) __PYX_ERR(0, 10252, __pyx_L1_error)
 10258:             symbols: Union[str, bool, List[int], List[str]] = 'auto',
 10259:             at: Union[ServerTimestampType, int, str, TimestampNanos, datetime.datetime],
+10260:             max_rows_per_batch: int = DEFAULT_MAX_CHUNK_ROWS,
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_DEFAULT_MAX_CHUNK_ROWS); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 10260, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_PyInt_FromNumber(&__pyx_t_4, NULL, 1) < (0)) __PYX_ERR(0, 10260, __pyx_L1_error)
  __pyx_mstate_global->__pyx_k__38 = ((PyObject*)__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  __pyx_t_4 = 0;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_DEFAULT_MAX_CHUNK_ROWS); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 10260, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  if (__Pyx_PyInt_FromNumber(&__pyx_t_25, NULL, 1) < (0)) __PYX_ERR(0, 10260, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_max_rows_per_batch, __pyx_t_25) < (0)) __PYX_ERR(0, 10252, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
+10261:             schema_overrides: Optional[Dict[str, object]] = None):
      if (!values[6]) values[6] = __Pyx_NewRef(((PyObject*)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("dataframe", 1, 1, 1, i); __PYX_ERR(0, 10252, __pyx_L3_error) }
      }
      for (Py_ssize_t i = 1; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseKeywordRequired("dataframe", *(__pyx_pyargnames[i - 0])); __PYX_ERR(0, 10252, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      __Pyx_RaiseKeywordRequired("dataframe", __pyx_mstate_global->__pyx_n_u_at); __PYX_ERR(0, 10252, __pyx_L3_error)
    }
    __pyx_v_df = values[0];
    __pyx_v_at = values[1];
    __pyx_v_table_name = ((PyObject*)values[2]);
    __pyx_v_table_name_col = values[3];
    __pyx_v_symbols = values[4];
    if (__Pyx_PyInt_FromNumber(&values[5], "max_rows_per_batch", 0) < (0)) __PYX_ERR(0, 10260, __pyx_L3_error)
    __pyx_v_max_rows_per_batch = ((PyObject*)values[5]);
    __pyx_v_schema_overrides = ((PyObject*)values[6]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("dataframe", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 10252, __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.QuestDB.dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_table_name), (&PyUnicode_Type), 1, "table_name", 2))) __PYX_ERR(0, 10256, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_max_rows_per_batch), (&PyLong_Type), 0, "max_rows_per_batch", 2))) __PYX_ERR(0, 10260, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema_overrides), (&PyDict_Type), 1, "schema_overrides", 2))) __PYX_ERR(0, 10261, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_10dataframe(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self), __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at, __pyx_v_max_rows_per_batch, __pyx_v_schema_overrides);
/* … */
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_schema_overrides_2, Py_None) < (0)) __PYX_ERR(0, 10252, __pyx_L1_error)
 10262:         """
 10263:         Ingest a dataframe through the pooled columnar QWP path.
 10264: 
 10265:         Ingestion always uses the direct (non-store-and-forward) column
 10266:         sender, independent of ``sf_dir``. On success, the call returns only
 10267:         after every DataFrame batch has been committed. The first successful
 10268:         batch on a fresh direct connection is already a commit boundary;
 10269:         subsequent batches are pipelined until the final commit. Large Arrow
 10270:         inputs add a checkpoint about every 100 batches to bound the
 10271:         uncommitted tail. The client may checkpoint earlier if deferred
 10272:         capacity fills or a batch must be split to fit.
 10273: 
 10274:         On a transient connection failure, the client re-sends the original,
 10275:         replayable DataFrame only when no batch was successfully published and
 10276:         the failed operation is not ``in_doubt``. Otherwise it raises rather
 10277:         than replaying from row zero. If a batch from this call may have
 10278:         committed, the raised error has ``in_doubt=True`` even when the final
 10279:         native write alone was provably not delivered. This includes local
 10280:         validation and Arrow stream errors after publication. Internal
 10281:         checkpoints do not reset the call's delivery status. The load did not
 10282:         finish, but any already committed prefix remains; an application-level
 10283:         retry of the whole DataFrame can duplicate it unless the destination
 10284:         table uses suitable ``DEDUP UPSERT KEYS``. A consumed one-shot stream
 10285:         may instead be non-replayable with ``in_doubt=False`` when no rows
 10286:         could have landed; that error asks for a fresh reader. Server-side
 10287:         rejections (e.g. a
 10288:         schema mismatch) surface as a plain
 10289:         :class:`QuestDBError`; the structured ``sender_error`` diagnostic
 10290:         is attached only by the store-and-forward senders.
 10291: 
 10292:         ``df`` accepts any of:
 10293: 
 10294:         - **pandas** ``pandas.DataFrame``. NumPy-backed columns route
 10295:           through the legacy planner; pyarrow-backed columns route
 10296:           through the Arrow C Stream capsule path below.
 10297:         - **polars** ``polars.DataFrame`` and ``polars.LazyFrame``
 10298:           (polars 1.32 or later). ``LazyFrame`` is materialised via
 10299:           ``.collect(engine='streaming')``.
 10300:         - **pyarrow** ``pa.Table``, ``pa.RecordBatch``, and
 10301:           ``pa.RecordBatchReader``.
 10302:         - Any object exposing the Arrow C Data Interface — i.e. with
 10303:           ``__arrow_c_stream__`` (duckdb / cudf / pyarrow-backed
 10304:           pandas 2.2+) or ``__arrow_c_array__`` (single Arrow array
 10305:           exporters, wrapped into a one-batch ``pa.Table``).
 10306: 
 10307:         ``at`` names the designated timestamp column (by name or index).
 10308:         Alternatively pass a fixed ``TimestampNanos`` / ``datetime``
 10309:         shared by every row (encoded as a repeated constant; resubmission
 10310:         stays idempotent under ``DEDUP UPSERT KEYS``), or the explicit
 10311:         :data:`ServerTimestamp` sentinel to let the server assign each
 10312:         row's timestamp on arrival — an opt-in mirroring the row API,
 10313:         since server-assigned timestamps defeat ``DEDUP UPSERT KEYS`` on
 10314:         resubmission.
 10315: 
 10316:         The columnar path loads one table per call: name it via
 10317:         ``table_name`` — or, for NumPy-backed pandas input, the
 10318:         dataframe's index name (``df.index.name``); Arrow-native input
 10319:         (polars, pyarrow, pyarrow-backed pandas) requires an explicit
 10320:         ``table_name``. ``table_name_col`` raises
 10321:         :class:`UnsupportedDataFrameShapeError` — split multi-table
 10322:         frames (e.g. ``df.groupby(col)``) and load each group.
 10323: 
 10324:         Supports a column-QWP v1 subset: a single per-call table name,
 10325:         non-null designated timestamp column, and the following
 10326:         per-column dtypes:
 10327: 
 10328:         - **Numeric**: NumPy ``bool/int{8,16,32,64}/uint{8..64}/float{32,64}``.
 10329:           Arrow ``pa.int{8,16,32,64}``, ``pa.float{16,32,64}``, and
 10330:           ``pa.uint{8,16,32,64}`` are accepted by the Rust Arrow batch route
 10331:           when the frame uses a fixed table name and a designated timestamp
 10332:           column name. Unsigned Arrow values follow the
 10333:           Rust Arrow policy: ``UInt8`` and ``UInt16`` widen to ``INT``,
 10334:           ``UInt32`` to ``LONG``, and ``UInt64`` values up to
 10335:           ``i64::MAX`` are accepted as ``LONG``. Larger ``UInt64`` values are
 10336:           rejected because QuestDB QWP-WS encodes integers as signed ``i64``.
 10337:           Signed ``int8``/``int16`` land as QuestDB ``INT``; the row-oriented
 10338:           :meth:`Sender.dataframe` instead widens every integer to ``LONG``.
 10339:           Likewise ``float32`` lands here as ``FLOAT`` but is widened to
 10340:           ``DOUBLE`` by the row path — ingest a given table through a single
 10341:           path to avoid a first-write column-type mismatch.
 10342:         - **String / Symbol**: object-dtype ``str``, ``pa.string()``,
 10343:           ``pa.large_string()``, ``pd.CategoricalDtype`` of strings.
 10344:         - **Timestamp**: NumPy ``datetime64`` units accepted by pandas and
 10345:           ``pa.timestamp`` with unit ``s``, ``us``, or ``ns`` (tz-aware
 10346:           accepted on Arrow-backed columns in the Rust Arrow route). An
 10347:           Arrow ``ms`` timestamp field lands as DATE instead — see
 10348:           **DATE** below — while a NumPy ``datetime64[ms]`` field is
 10349:           widened to a microsecond TIMESTAMP unless a
 10350:           ``df.attrs['questdb']`` claim names it DATE.
 10351:           Timestamp *field* columns accept null timestamps (``NaT`` /
 10352:           ``None``) and values before the Unix epoch; a ``datetime64[ns]``
 10353:           field carrying ``NaT`` is re-exported through Arrow so its
 10354:           ``INT64_MIN`` null sentinel is preserved (this needs pyarrow).
 10355:           The *designated* timestamp column (``at=``) must be non-null
 10356:           and at or after the epoch.
 10357:         - **Decimal**: Arrow-backed ``pa.decimal{32,64,128,256}`` columns
 10358:           (``pa.decimal32``/``pa.decimal64`` require pyarrow >= 19), or
 10359:           object-dtype columns of ``decimal.Decimal`` (re-exported through
 10360:           Arrow; the decimal width and scale are inferred from the values).
 10361:         - **Array**: Arrow ``pa.list_`` / ``pa.large_list`` /
 10362:           ``pa.fixed_size_list`` columns with a ``float64`` leaf (nested for
 10363:           multi-dimensional), and object-dtype columns of ``float64``
 10364:           ``numpy.ndarray`` cells (any rank; requires pyarrow). Both land as
 10365:           QuestDB ``ARRAY(DOUBLE)``. Null rows are allowed; null *elements*
 10366:           inside an array are not.
 10367:         - **UUID**: object-dtype columns of ``uuid.UUID``, the
 10368:           ``arrow.uuid`` extension type over ``pa.fixed_size_binary(16)``,
 10369:           or any 16-byte binary column claimed with
 10370:           ``schema_overrides={'col': 'uuid'}``. Bytes are **canonical
 10371:           RFC 4122 big-endian** — exactly ``uuid.UUID.bytes`` — and the
 10372:           client byte-swaps them into QWP wire order. Round-trip through
 10373:           :meth:`query <questdb.QuestDB.query>` is byte-identity.
 10374: 
 10375:           The ``arrow.uuid`` route requires pyarrow >= 18, which is where
 10376:           that canonical extension type is registered, and the column
 10377:           must carry the extension **type** — build it from ``pa.uuid()``.
 10378:           Writing ``ARROW:extension:name`` as plain field metadata is not
 10379:           equivalent: pyarrow leaves such a key on the field, and a
 10380:           pandas ``ArrowDtype`` carries a type and no field, so a frame
 10381:           built that way holds a bare ``pa.fixed_size_binary(16)`` and
 10382:           is refused as unlabelled — see **Binary** below. Frames
 10383:           imported over the C data interface or Arrow IPC do get the
 10384:           extension type rebuilt from that key, which is why the same
 10385:           metadata can route two ways. The other two routes —
 10386:           ``uuid.UUID`` cells and ``schema_overrides`` — are free of both
 10387:           conditions, and a ``{'kind': 'uuid'}`` entry in
 10388:           ``df.attrs['questdb']`` claims an object-dtype column of
 10389:           16-byte ``bytes``, the shape
 10390:           ``to_pandas(dtype_backend='numpy_nullable')`` returns. On
 10391:           pyarrow < 18, where no column can carry the label at all, a
 10392:           pandas frame's bare ``pa.fixed_size_binary(16)`` column is
 10393:           still refused rather than quietly landing as BINARY.
 10394:         - **LONG256**: 32-byte binary columns. Bytes are little-endian
 10395:           limbs, least-significant limb first, forwarded verbatim. Three
 10396:           routes claim the type, and they need different inputs.
 10397:           ``schema_overrides={'col': 'long256'}`` needs a fully
 10398:           Arrow-backed frame — every column an ArrowDtype, e.g.
 10399:           ``df.convert_dtypes(dtype_backend='pyarrow')``.
 10400:           ``questdb.column_type=long256`` *field* metadata needs a
 10401:           ``pa.Table`` or ``pa.RecordBatch`` handed straight to this
 10402:           method: field metadata lives on the field, a pandas
 10403:           ``ArrowDtype`` carries a type and no field, so a column that
 10404:           passed through pandas has already lost the claim. A
 10405:           ``{'kind': 'long256'}`` entry in ``df.attrs['questdb']`` claims
 10406:           an object-dtype column of Python ints or of 32-byte ``bytes``
 10407:           — the two shapes :meth:`QueryResult.to_pandas` hands a LONG256
 10408:           column back in, plain and ``dtype_backend='numpy_nullable'``
 10409:           respectively. Ints are encoded as 32 unsigned little-endian
 10410:           bytes, so every non-null value must satisfy
 10411:           ``0 <= value < 2**256``; ``bytes`` cells go out verbatim and
 10412:           must be exactly 32 bytes. LONG256 has no Arrow extension type,
 10413:           so a ``pa.fixed_size_binary(32)`` column in a pandas frame
 10414:           claims nothing by itself and is refused rather than sent as
 10415:           opaque bytes — see **Binary** below for why pandas frames
 10416:           refuse where native Arrow input writes BINARY.
 10417:         - **Binary**: object-dtype columns of ``bytes``, ``bytearray``, or
 10418:           C-contiguous one-byte-item ``memoryview`` cells land as BINARY,
 10419:           the same value types :func:`Buffer.row <questdb.ingress.Buffer.row>`
 10420:           accepts. Arrow ``pa.binary()``, ``pa.large_binary()``, and
 10421:           ``pa.fixed_size_binary(n)`` columns also land as BINARY, with
 10422:           the exception and the condition below.
 10423: 
 10424:           The exception is ``pa.fixed_size_binary(8)``, which both
 10425:           planners refuse with ``ArrowUnsupportedColumnKind``, labelled
 10426:           or not. polars exports its ``Object`` dtype in exactly that
 10427:           shape, as handles to objects in its own process rather than
 10428:           data, and once exported nothing else marks it. To store
 10429:           genuine 8-byte values as BINARY, make the column
 10430:           variable-length binary: ``pa.binary()``, ``pl.Binary``, or an
 10431:           object column of ``bytes``.
 10432: 
 10433:           The condition is on widths 16 and 32. A width on its own
 10434:           claims nothing: such a column is a UUID or a LONG256 only when
 10435:           something labels it — ``pa.uuid()``, ``questdb.column_type``
 10436:           field metadata of ``uuid`` or ``long256``, ``schema_overrides``,
 10437:           or a ``df.attrs['questdb']`` claim. Any other extension type,
 10438:           or any other ``questdb.column_type`` value, leaves the column
 10439:           unlabelled — except ``binary``, which, like
 10440:           ``schema_overrides={'col': 'binary'}``, labels it as plain bytes.
 10441:           What happens to an unlabelled
 10442:           one depends on where it comes from, not on which planner
 10443:           writes it. Native Arrow input — a ``pa.Table``,
 10444:           ``pa.RecordBatch``, ``pa.RecordBatchReader``, or any other
 10445:           ``__arrow_c_stream__`` producer — keeps its field metadata, so
 10446:           an unlabelled column there is written as BINARY, and once the
 10447:           write is done the ``questdb`` logger records one WARNING per
 10448:           such column naming the remedies. A pandas frame refuses it with ``BadDataFrame``,
 10449:           fully Arrow-backed or not: an ``ArrowDtype`` carries a type and
 10450:           no field, so the column may be a UUID or LONG256 column whose
 10451:           label was dropped on the way into pandas, and guessing would
 10452:           auto-create a table with the wrong column type. The refusal
 10453:           does not depend on the pyarrow version — which remedies the
 10454:           message can name does, since ``pa.uuid()`` needs pyarrow 18,
 10455:           but which columns are accepted does not. To write either width
 10456:           as BINARY without the warning or the refusal, label it as
 10457:           plain bytes — ``schema_overrides={'col': 'binary'}``, or
 10458:           ``{"questdb.column_type": "binary"}`` field metadata on native
 10459:           Arrow input — which sends it as it is, with no copy. Making the
 10460:           column variable-length binary (``pa.binary()``,
 10461:           ``pd.ArrowDtype(pa.binary())``) or, in pandas, an object-dtype
 10462:           column of ``bytes`` works too, at the cost of a copy. Requires
 10463:           QuestDB 10 or newer.
 10464:         - **DATE**: Arrow ``pa.timestamp('ms')`` (tz-aware or naive),
 10465:           ``pa.date32()``, and ``pa.date64()`` columns land as DATE. The
 10466:           Arrow type is itself the claim, so there is no DATE cell type
 10467:           and no ``'date'`` kind for ``schema_overrides``. Such a column
 10468:           lands as DATE whether the frame is fully Arrow-backed or mixed
 10469:           with NumPy columns. What has no route of its own to DATE is
 10470:           the NumPy ``datetime64[ms]`` dtype, which widens to a
 10471:           microsecond TIMESTAMP, and its tz-aware ``datetime64[ms, tz]``
 10472:           form, which is rejected outright. A millisecond column named
 10473:           by ``at=`` becomes the table's designated TIMESTAMP, like any
 10474:           other ``at`` column. Round-tripping keeps the type: :meth:`query
 10475:           <questdb.QuestDB.query>` returns a DATE column as
 10476:           ``pa.timestamp('ms', 'UTC')``, which ``to_arrow()`` and
 10477:           ``to_pandas(dtype_backend='pyarrow')`` feed straight back as
 10478:           DATE. Plain ``to_pandas()`` gives a NumPy ``datetime64[ms]``
 10479:           column, and the ``df.attrs['questdb']`` claim it comes with
 10480:           names the column DATE, so this method puts the Arrow type back
 10481:           on before writing and that frame lands as DATE too.
 10482:           Row-at-a-time, DATE is written with :class:`DateMillis
 10483:           <questdb.DateMillis>` through :func:`Buffer.row
 10484:           <questdb.ingress.Buffer.row>`.
 10485: 
 10486:         Server-side coercion handles cross-type writes (e.g. ``pa.string()``
 10487:         UUIDs landing in a UUID column are parsed server-side; narrow ints
 10488:         landing in a wider column are widened). Failures surface as
 10489:         ``QuestDBError`` from the ``flush()``.
 10490: 
 10491:         ``schema_overrides`` reclassifies columns by name, mapping each to
 10492:         ``'symbol'``, ``'ipv4'``, ``'char'``, ``'uuid'``, ``'long256'``,
 10493:         ``'binary'``, or ``('geohash', bits)`` (e.g.
 10494:         ``{'venue': 'symbol', 'src_ip': 'ipv4'}``). Unknown column names are
 10495:         rejected. An override wins over any Arrow field metadata on its
 10496:         column, except ``'binary'``, which is refused on a column whose
 10497:         own type or field metadata labels it UUID or LONG256. ``'uuid'`` and ``'long256'`` apply to fixed-size and
 10498:         variable-length binary columns alike — the route polars frames take,
 10499:         since polars has no fixed-size binary dtype — and every non-null
 10500:         value must be exactly 16 or 32 bytes respectively. ``'binary'``
 10501:         applies to binary columns and says a 16- or 32-byte column holds
 10502:         plain bytes (see **Binary** above); it cannot override a
 10503:         ``pa.uuid()`` type or a ``uuid`` / ``long256`` field label, and
 10504:         is refused on such a column. It requires the
 10505:         Arrow columnar path (fully Arrow-backed input without
 10506:         ``table_name_col``; pandas input needs pandas 2.2 or later); on
 10507:         input that falls back to the NumPy planner
 10508:         it raises :class:`UnsupportedDataFrameShapeError`.
 10509: 
 10510:         A pandas frame that came out of :meth:`QueryResult.to_pandas`
 10511:         carries its source column types in ``df.attrs['questdb']``, and
 10512:         this method reads them back. That is what keeps UUID, LONG256,
 10513:         IPV4, CHAR, GEOHASH, and DATE columns their own type on a
 10514:         read-modify-write round trip: their claim lives in Arrow *field*
 10515:         metadata, which a pandas dtype — an Arrow type and no field —
 10516:         cannot hold. The metadata recalls what the frame held when it was
 10517:         read, so a column since dropped, renamed, or retyped simply loses
 10518:         its claim, and ``symbols`` / ``schema_overrides`` outrank it.
 10519:         BYTE, SHORT, and INT columns still widen one step on the way back
 10520:         in; the Arrow ingest API has no override that pins them.
 10521: 
 10522:         The claim is honoured on every shape a ``to_pandas`` backend
 10523:         produces, so plain ``to_pandas()``,
 10524:         ``dtype_backend='pyarrow'`` and ``dtype_backend='numpy_nullable'``
 10525:         round-trip the same way. Besides the Arrow-backed and plain NumPy
 10526:         columns, that covers the object columns the other backends leave
 10527:         behind: Python ints, which is what a pandas masked column becomes
 10528:         and what plain ``to_pandas()`` returns a LONG256 as, and
 10529:         ``bytes``, which is how ``dtype_backend='numpy_nullable'``
 10530:         returns UUID and LONG256. Frames saved from version 5.0, whose
 10531:         plain ``to_pandas()`` returned a GEOHASH column as an unsigned
 10532:         integer, round-trip too: such a column is written as the signed
 10533:         integer of the same width, bit for bit. A frame whose columns
 10534:         were retyped past that set — which a custom ``types_mapper`` can
 10535:         do — keeps the claim in ``attrs`` and cannot use it: a claimed
 10536:         column that arrives as a float or a string dtype lands as that
 10537:         dtype implies, and the claim it could not use is reported as a
 10538:         warning-level record on the ``questdb`` logger. An object column
 10539:         states no width or range of its own, so a claimed value the type
 10540:         cannot hold — an integer past ``2**32-1`` under ``ipv4``, a cell
 10541:         that is not exactly 16 or 32 bytes under ``uuid`` or ``long256``
 10542:         — is refused rather than written into a column of the claimed
 10543:         type. GEOHASH is the deliberate exception, described next.
 10544: 
 10545:         Bulk GEOHASH values are raw bit patterns, whatever the column is
 10546:         stored as: NumPy, Arrow, or an object column of Python ints,
 10547:         which is also what a pandas masked column becomes. This is a
 10548:         deliberate contract, the same for every shape, so that whether a
 10549:         frame is written does not depend on whether a GEOHASH column
 10550:         holds a null; plain :meth:`QueryResult.to_pandas` returns a
 10551:         column that does as a masked column. The declared precision
 10552:         must be in ``1..=60`` and fit the signed integer carrier, but no
 10553:         per-value check verifies that the pattern has no bits set above
 10554:         that precision. For example, ``32`` under ``GEOHASH(5b)`` is
 10555:         accepted even though it needs six bits. If the declared precision
 10556:         is wrong for the data, the write can succeed and store a different
 10557:         GEOHASH location or ``NULL``. Only the low
 10558:         ``ceil(precision / 8)`` bytes are encoded, and the exact result of
 10559:         an inconsistent value is unspecified. This is a semantic
 10560:         data-integrity risk, not a memory-safety risk for otherwise valid
 10561:         NumPy/Arrow buffers. The caller must validate bulk values. The
 10562:         scalar :class:`Geohash <questdb.Geohash>` constructor remains
 10563:         strict; malformed custom Arrow C Data structures remain invalid
 10564:         input and are outside this guarantee.
 10565: 
 10566:         A column of nothing but nulls names no type of its own, and
 10567:         without a claim it is left out of the write and out of the
 10568:         table the write auto-creates. A claim names one, so a claimed
 10569:         all-null column is written as the claimed type — which is what
 10570:         keeps a batch that happens to hold no value for one column from
 10571:         deciding the shape of the table.
 10572: 
 10573:         The claim a query result carries reads as an ordinary mapping
 10574:         but cannot be edited in place, because every copy of the frame
 10575:         shares it; assign a new mapping to ``df.attrs['questdb']`` to
 10576:         change it. A plain hand-written ``dict`` is read here just the
 10577:         same, in this shape:
 10578: 
 10579:         .. code-block:: python
 10580: 
 10581:             df.attrs['questdb'] = {
 10582:                 'version': 1,
 10583:                 'columns': {
 10584:                     'src_ip': {'kind': 'ipv4'},
 10585:                     'pos': {'kind': 'geohash', 'precision_bits': 20},
 10586:                     'traded_on': {'kind': 'date'},
 10587:                 },
 10588:             }
 10589: 
 10590:         ``version`` must be ``1`` when present, and a mapping without it
 10591:         reads as version 1. The claim's vocabulary can gain kinds, and a
 10592:         client applying a version it does not understand would write the
 10593:         wrong column type, which is the outcome the claim exists to
 10594:         prevent, so a mapping carrying any other version is not read and
 10595:         every column in it is ignored. A claim, or a column's entry in
 10596:         it, that is not read is reported through the ``questdb`` logger;
 10597:         the write goes ahead either way. ``kind`` is one of
 10598:         ``'uuid'``, ``'long256'``, ``'ipv4'``, ``'char'``, ``'geohash'``,
 10599:         or ``'date'`` — the types whose claim cannot always ride on a pandas
 10600:         dtype. ``precision_bits`` accompanies ``'geohash'`` alone. A
 10601:         ``'date'`` claim restores the DATE type after plain pandas has
 10602:         represented it as NumPy ``datetime64[ms]``. Naming a column that is
 10603:         not in the frame is not an error; the entry is skipped.
 10604: 
 10605:         A ``pa.Table`` or ``pa.RecordBatch`` from
 10606:         :meth:`QueryResult.to_arrow` or :meth:`QueryResult.iter_arrow`
 10607:         carries the same claims in Arrow field metadata, as a
 10608:         ``questdb.column_type`` key on every field, and this method
 10609:         passes that metadata to the native client unchanged. A field
 10610:         claim the field's Arrow type cannot carry — ``'short'`` on
 10611:         ``pa.int32()``, ``'ipv4'`` on ``pa.int64()`` — makes this method
 10612:         raise :class:`QuestDBError <questdb.QuestDBError>`, with ``code``
 10613:         set to ``QuestDBErrorCode.ArrowIngest``, before anything is sent.
 10614:         This stricter rule is deliberate. Field metadata is the input
 10615:         contract of the native Arrow ingest, which refuses such a field
 10616:         in every language that uses it. A field claim also goes stale
 10617:         only when the old field is carried onto a new type: ``Table.cast``
 10618:         with a schema built from ``field.with_type(...)``, or
 10619:         ``pa.concat_tables(..., promote_options='permissive')`` with the
 10620:         claimed table first. Casting to a schema built from scratch,
 10621:         ``set_column`` by name, and a polars or pandas round trip all
 10622:         build fields without the key. ``df.attrs`` belongs to the whole
 10623:         frame and survives ``astype`` and arithmetic, so a stale claim
 10624:         there is the normal case and is logged instead. To write a
 10625:         retyped column, drop its metadata:
 10626: 
 10627:         .. code-block:: python
 10628: 
 10629:             i = table.schema.get_field_index('col')
 10630:             table = table.cast(table.schema.set(
 10631:                 i, table.schema.field(i).remove_metadata()))
 10632: 
 10633:         ``max_rows_per_batch`` sets the pipelining granularity, not a
 10634:         safety limit: any batch exceeding the negotiated per-batch byte
 10635:         cap is split regardless of it, and a single row is never bounded
 10636:         by it. Each batch is one unit of client memory and server-side
 10637:         apply. The first successful batch on a fresh connection is a commit
 10638:         boundary. Sliceable Arrow inputs add another checkpoint about every
 10639:         100 batches, so ``max_rows_per_batch * 100`` rows approximates the
 10640:         maximum periodic uncommitted tail, not a whole-source replay window.
 10641:         The NumPy planner pipelines the remaining batches until its final
 10642:         commit. Either path may checkpoint earlier when deferred capacity
 10643:         fills. Raise ``max_rows_per_batch`` for narrow numeric
 10644:         rows; lower it for very wide rows or tight memory. Streaming Arrow
 10645:         input (``pa.RecordBatchReader``) is not re-batched — the producer's
 10646:         batch size governs its checkpoint window.
 10647:         """
+10648:         cdef qdb_pystr_buf* b = NULL
  __pyx_v_b = NULL;
+10649:         cdef dataframe_plan_t plan = dataframe_plan_blank()
  __pyx_v_plan = __pyx_f_7questdb_7_client_dataframe_plan_blank();
+10650:         cdef questdb_db* db = NULL
  __pyx_v_db = NULL;
+10651:         cdef bint db_use = False
  __pyx_v_db_use = 0;
 10652:         cdef direct_conn_source_t src
+10653:         db = self._begin_db_use('dataframe')
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_dataframe, NULL); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 10653, __pyx_L1_error)
  __pyx_v_db = __pyx_t_1;
+10654:         db_use = True
  __pyx_v_db_use = 1;
+10655:         try:
  /*try:*/ {
 10656:             # Claimed inside the `try`, and after `_begin_db_use`,
 10657:             # which raises on a closed handle: an allocation made
 10658:             # ahead of that raise has nothing to free it, so a retry
 10659:             # loop against a closed handle leaks one per attempt.
+10660:             b = qdb_pystr_buf_new()
    __pyx_v_b = qdb_pystr_buf_new();
+10661:             src.db = db
    __pyx_v_src.db = __pyx_v_db;
+10662:             src.opts = NULL
    __pyx_v_src.opts = NULL;
+10663:             _direct_dataframe_run(
    __pyx_t_4 = __pyx_f_7questdb_7_client__direct_dataframe_run((&__pyx_v_src), (((double)questdb_db_reconnect_max_duration_ms(__pyx_v_db)) / 1000.0), __pyx_v_b, (&__pyx_v_plan), __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at, __pyx_t_2, __pyx_v_schema_overrides, __pyx_t_3); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10663, __pyx_L4_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 10664:                 &src,
 10665:                 questdb_db_reconnect_max_duration_ms(db) / 1000.0,
 10666:                 b,
 10667:                 &plan,
 10668:                 df,
 10669:                 table_name,
 10670:                 table_name_col,
 10671:                 symbols,
 10672:                 at,
+10673:                 max_rows_per_batch,
    __pyx_t_2 = __Pyx_PyLong_As_size_t(__pyx_v_max_rows_per_batch); if (unlikely((__pyx_t_2 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 10673, __pyx_L4_error)
 10674:                 schema_overrides,
+10675:                 self._oidc_auth)
    __pyx_t_3 = __pyx_v_self->_oidc_auth;
    __Pyx_INCREF(__pyx_t_3);
+10676:             return self
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_self);
    __pyx_r = ((PyObject *)__pyx_v_self);
    goto __pyx_L3_return;
  }
 10677:         finally:
+10678:             if b != NULL:
  /*finally:*/ {
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
      if ( unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __pyx_t_5 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_7 = __pyx_filename;
      {
        __pyx_t_14 = (__pyx_v_b != NULL);
        if (__pyx_t_14) {
/* … */
        }
/* … */
      __pyx_t_14 = (__pyx_v_b != NULL);
      if (__pyx_t_14) {
/* … */
      }
+10679:                 qdb_pystr_buf_free(b)
          qdb_pystr_buf_free(__pyx_v_b);
/* … */
        qdb_pystr_buf_free(__pyx_v_b);
+10680:             if db_use:
        if (__pyx_v_db_use) {
/* … */
        }
/* … */
      if (__pyx_v_db_use) {
/* … */
      }
+10681:                 self._end_db_use()
          ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10681, __pyx_L7_error)
/* … */
        ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10681, __pyx_L1_error)
+10682:             _oidc_raise_unscheduled_main()
        __pyx_t_4 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10682, __pyx_L7_error)
      }
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_ErrRestore(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      __pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_7;
      goto __pyx_L1_error;
      __pyx_L7_error:;
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      __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;
      __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L3_return: {
      __pyx_t_13 = __pyx_r;
      __pyx_r = 0;
/* … */
      __pyx_t_4 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 10682, __pyx_L1_error)
      __pyx_r = __pyx_t_13;
      __pyx_t_13 = 0;
      goto __pyx_L0;
    }
  }
 10683: 
+10684:     def execute(self, str sql, object binds=None, *, object timeout=None):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_13execute(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_7QuestDB_12execute, "\n        Run a statement and discard whatever it returns.\n\n        Executes ``sql`` like :meth:`query`, drains the result to its\n        clean end and returns the pooled connection \342\200\224 the pattern DDL\n        and DML otherwise need spelled out as\n        ``with db.query(sql) as r: r.to_pandas()``. Statement output\n        (a ``COPY`` status row, admin-function rows, a stray\n        ``SELECT``) is discarded; use :meth:`query` when you want the\n        result. The connection's SYMBOL dictionary is left untouched.\n\n        ``binds`` and ``timeout`` behave exactly as on :meth:`query`.\n\n        Returns the statement's ``EXEC_DONE`` report as an\n        :class:`ExecDone` named tuple ``(op_type, rows_affected)``, or\n        ``None`` for a statement that streamed a result set instead (a\n        ``SELECT``). See :attr:`QueryResult.exec_done` for the caveats on\n        ``rows_affected``.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_7QuestDB_13execute = {"execute", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_13execute, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_12execute};
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_13execute(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_sql = 0;
  PyObject *__pyx_v_binds = 0;
  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("execute (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_sql,&__pyx_mstate_global->__pyx_n_u_binds,&__pyx_mstate_global->__pyx_n_u_timeout,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(0, 10684, __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(0, 10684, __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(0, 10684, __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, "execute", 0) < (0)) __PYX_ERR(0, 10684, __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("execute", 0, 1, 2, i); __PYX_ERR(0, 10684, __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(0, 10684, __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(0, 10684, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_sql = ((PyObject*)values[0]);
    __pyx_v_binds = values[1];
    __pyx_v_timeout = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("execute", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 10684, __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.QuestDB.execute", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sql), (&PyUnicode_Type), 1, "sql", 1))) __PYX_ERR(0, 10684, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_12execute(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self), __pyx_v_sql, __pyx_v_binds, __pyx_v_timeout);

  /* 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_7QuestDB_12execute(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self, PyObject *__pyx_v_sql, PyObject *__pyx_v_binds, PyObject *__pyx_v_timeout) {
  PyObject *__pyx_v_result = 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_AddTraceback("questdb._client.QuestDB.execute", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 10684, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_timeout, Py_None) < (0)) __PYX_ERR(0, 10684, __pyx_L1_error)
  __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_13execute, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB_execute, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[214])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 10684, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_25, __pyx_mstate_global->__pyx_tuple[24]);
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_25, __pyx_t_17);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_execute_2, __pyx_t_25) < (0)) __PYX_ERR(0, 10684, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 10685:         """
 10686:         Run a statement and discard whatever it returns.
 10687: 
 10688:         Executes ``sql`` like :meth:`query`, drains the result to its
 10689:         clean end and returns the pooled connection — the pattern DDL
 10690:         and DML otherwise need spelled out as
 10691:         ``with db.query(sql) as r: r.to_pandas()``. Statement output
 10692:         (a ``COPY`` status row, admin-function rows, a stray
 10693:         ``SELECT``) is discarded; use :meth:`query` when you want the
 10694:         result. The connection's SYMBOL dictionary is left untouched.
 10695: 
 10696:         ``binds`` and ``timeout`` behave exactly as on :meth:`query`.
 10697: 
 10698:         Returns the statement's ``EXEC_DONE`` report as an
 10699:         :class:`ExecDone` named tuple ``(op_type, rows_affected)``, or
 10700:         ``None`` for a statement that streamed a result set instead (a
 10701:         ``SELECT``). See :attr:`QueryResult.exec_done` for the caveats on
 10702:         ``rows_affected``.
 10703:         """
+10704:         self._begin_db_use('execute')
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_execute_2, NULL); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 10704, __pyx_L1_error)
+10705:         try:
  /*try:*/ {
+10706:             result = self.query(
    __pyx_t_3 = ((PyObject *)__pyx_v_self);
    __Pyx_INCREF(__pyx_t_3);
+10707:                 sql, binds, reset_symbol_dict=False, timeout=timeout)
    __pyx_t_4 = 0;
    {
      PyObject *__pyx_callargs[3 + ((CYTHON_VECTORCALL) ? 2 : 0)] = {__pyx_t_3, __pyx_v_sql, __pyx_v_binds};
      __pyx_t_5 = __Pyx_MakeVectorcallBuilderKwds(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 10706, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_reset_symbol_dict, Py_False, __pyx_t_5, __pyx_callargs+3, 0) < (0)) __PYX_ERR(0, 10706, __pyx_L4_error)
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_timeout, __pyx_v_timeout, __pyx_t_5, __pyx_callargs+3, 1) < (0)) __PYX_ERR(0, 10706, __pyx_L4_error)
      __pyx_t_2 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_query, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_5);
      __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(0, 10706, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_v_result = __pyx_t_2;
    __pyx_t_2 = 0;
+10708:             try:
    /*try:*/ {
+10709:                 result._drain()
      __pyx_t_5 = __pyx_v_result;
      __Pyx_INCREF(__pyx_t_5);
      __pyx_t_4 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
        __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_drain_2, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10709, __pyx_L7_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+10710:                 return result.exec_done
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_result, __pyx_mstate_global->__pyx_n_u_exec_done); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10710, __pyx_L7_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_r = __pyx_t_2;
      __pyx_t_2 = 0;
      goto __pyx_L6_return;
    }
 10711:             finally:
+10712:                 result.close()
    /*finally:*/ {
      __pyx_L7_error:;
      /*exception exit:*/{
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_ExceptionSwap(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
        if ( unlikely(__Pyx_GetException(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
        __Pyx_XGOTREF(__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_10);
        __Pyx_XGOTREF(__pyx_t_11);
        __Pyx_XGOTREF(__pyx_t_12);
        __Pyx_XGOTREF(__pyx_t_13);
        __Pyx_XGOTREF(__pyx_t_14);
        __pyx_t_6 = __pyx_lineno; __pyx_t_7 = __pyx_clineno; __pyx_t_8 = __pyx_filename;
        {
          __pyx_t_5 = __pyx_v_result;
          __Pyx_INCREF(__pyx_t_5);
          __pyx_t_4 = 0;
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
            __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_close, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
            if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10712, __pyx_L10_error)
            __Pyx_GOTREF(__pyx_t_2);
          }
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        }
        __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_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_ErrRestore(__pyx_t_9, __pyx_t_10, __pyx_t_11);
        __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
        __pyx_lineno = __pyx_t_6; __pyx_clineno = __pyx_t_7; __pyx_filename = __pyx_t_8;
        goto __pyx_L4_error;
        __pyx_L10_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_9); __pyx_t_9 = 0;
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
        goto __pyx_L4_error;
      }
      __pyx_L6_return: {
        __pyx_t_14 = __pyx_r;
        __pyx_r = 0;
        __pyx_t_5 = __pyx_v_result;
        __Pyx_INCREF(__pyx_t_5);
        __pyx_t_4 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
          __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_close, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10712, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_14;
        __pyx_t_14 = 0;
        goto __pyx_L3_return;
      }
    }
  }
 10713:         finally:
+10714:             self._end_db_use()
  /*finally:*/ {
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9);
      if ( unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_13, &__pyx_t_12) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_13, &__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_14);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_9);
      __pyx_t_7 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_15 = __pyx_filename;
      {
        ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10714, __pyx_L12_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);
      __Pyx_XGIVEREF(__pyx_t_14);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_ErrRestore(__pyx_t_14, __pyx_t_13, __pyx_t_12);
      __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0;
      __pyx_lineno = __pyx_t_7; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_15;
      goto __pyx_L1_error;
      __pyx_L12_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);
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L3_return: {
      __pyx_t_9 = __pyx_r;
      __pyx_r = 0;
      ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10714, __pyx_L1_error)
      __pyx_r = __pyx_t_9;
      __pyx_t_9 = 0;
      goto __pyx_L0;
    }
  }
 10715: 
+10716:     def query(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_15query(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_7QuestDB_14query, "\n        Execute a SQL query and return a :class:`QueryResult`.\n\n        Egress goes through the QuestDB Wire Protocol (QWP/WebSocket)\n        ``/read/v1`` endpoint. The reader is borrowed from the same\n        connection pool that hosts the ingress writers and is returned to\n        the pool when the returned :class:`QueryResult` is consumed or\n        closed (a poisoned connection is dropped instead). Auth / TLS\n        settings apply to both directions.\n\n        To run several queries on one pooled connection, lease a\n        :class:`PooledReader` with :meth:`reader` instead.\n\n        :param sql: SQL text to execute. Forwarded verbatim to QuestDB.\n\n        :param binds: Positional bind parameters matching the ``$1``..``$N``\n            placeholders in ``sql``, as a list or tuple. Always prefer binds\n            over interpolating values into the SQL text \342\200\224 they take no\n            escaping and keep types exact. Supported Python types and their\n            QuestDB bind types:\n\n            - ``None`` \342\206\222 SQL NULL (bound as a VARCHAR null)\n            - ``bool`` \342\206\222 BOOLEAN\n            - ``int`` \342\206\222 LONG (must fit signed 64-bit)\n            - ``float`` \342\206\222 DOUBLE\n            - ``str`` \342\206\222 VARCHAR\n            - ``datetime.datetime`` \342\206\222 TIMESTAMP (microseconds; a naive\n              value is interpreted as UTC, the same rule as everywhere else\n              in the API)\n            - :class:`TimestampMicros` \342\206\222 TIMESTAMP\n            - :class:`TimestampNanos` \342\206\222 TIMESTAMP_NS\n            - ``datetime.date`` \342\206\222 DATE\n            - ``decimal.Decimal`` \342\206\222 the narrowest DECIMAL that holds it,\n              with its fractional digits as the scale (up to 76 digits and\n              scale 76; NaN and infinities raise :class:`ValueError`)\n            - ``uuid.UUID`` \342\206\222 UUID\n\n            Any other type raises :class:`TypeError` na""ming the placeholder.\n\n            .. code-block:: python\n\n                res = db.query(\n                    'SELECT * FROM trades WHERE ts > $1 AND sym = $2',\n                    [datetime.datetime(2026, 7, 1), 'BTC-USD'])\n\n        :param reset_symbol_dict: When ``True`` (the default), the server\n            resets the connection's SYMBOL dictionary before this query so it\n            never inherits symbols from earlier queries on the pooled\n            connection (query-scoped dict), avoiding cross-query dictionary\n            bloat in ``to_polars()`` / ``to_pandas()``. Set ``False`` to keep\n            the dictionary warm across repeated identical queries. No-op\n            against servers that predate the capability.\n\n        :param timeout: Run this query under its own budget instead of the\n            server-wide ``query.timeout``, overriding the connect string's\n            ``query_timeout_ms``. An ``int`` is milliseconds; a\n            ``datetime.timedelta`` works too, with a positive value below\n            one millisecond rounded *up* to 1 ms. ``None`` (the default)\n            keeps the connect string's ``query_timeout_ms``; ``0`` clears\n            it. Requires a server advertising ``CAP_QUERY_TIMEOUT``: against\n            an older one a non-zero timeout is refused before anything is\n            sent, with ``QuestDBErrorCode.UnsupportedServer``, rather than\n            silently running under the server default; the connection is\n            untouched, so pass ``timeout=0`` or raise the server's\n            ``query.timeout`` instead. On expiry the error carries\n            ``QuestDBErrorCode.QueryTimeout`` and the connection stays\n            usable \342\200\224 but do not retry a write on it: a statement that\n            outlives its timeout is reported as done instead, and a DDL /\n            INSERT / UPDATE that timed out waiting for the table writer may\n            still be applied.\n\n        :return: A :class:`Quer""yResult`. Materialise it via\n            ``iter_rows()``, ``to_pandas()``, ``to_arrow()``,\n            ``iter_arrow()``, ``iter_pandas()``, or the\n            ``__arrow_c_stream__`` PyCapsule protocol.\n\n        Sentinel-value collisions in the result frame round-trip QuestDB's\n        contract: ``INT64_MIN`` in a LONG column, NaN in DOUBLE / FLOAT,\n        and the sentinel values for INT / DATE / TIMESTAMP /\n        TIMESTAMP_NS / CHAR / UUID / LONG256 / IPV4 are all interpreted\n        as NULL by QuestDB and cannot be distinguished from legitimate\n        occurrences of those values. GEOHASH has no such sentinel, so a\n        NULL GEOHASH stays distinct from every value.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_7QuestDB_15query = {"query", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_15query, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_14query};
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_15query(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_sql = 0;
  PyObject *__pyx_v_binds = 0;
  int __pyx_v_reset_symbol_dict;
  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("query (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_sql,&__pyx_mstate_global->__pyx_n_u_binds,&__pyx_mstate_global->__pyx_n_u_reset_symbol_dict,&__pyx_mstate_global->__pyx_n_u_timeout,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(0, 10716, __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(0, 10716, __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(0, 10716, __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, "query", 0) < (0)) __PYX_ERR(0, 10716, __pyx_L3_error)
/* … */
  /* 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_7QuestDB_14query(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self, PyObject *__pyx_v_sql, PyObject *__pyx_v_binds, int __pyx_v_reset_symbol_dict, PyObject *__pyx_v_timeout) {
  struct __pyx_obj_7questdb_7_client__ReaderHandle *__pyx_v_reader_handle = 0;
  struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_cursor_handle = 0;
  struct questdb_db *__pyx_v_db;
  int64_t __pyx_v_timeout_ms;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("questdb._client.QuestDB.query", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_reader_handle);
  __Pyx_XDECREF((PyObject *)__pyx_v_cursor_handle);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_25 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 10716, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
/* … */
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_15query, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB_query, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[215])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 10716, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_17, __pyx_mstate_global->__pyx_tuple[24]);
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_17, __pyx_t_25);
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_query, __pyx_t_17) < (0)) __PYX_ERR(0, 10716, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 10717:             self,
 10718:             str sql,
+10719:             object binds=None,
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
 10720:             *,
+10721:             bint reset_symbol_dict=True,
      __pyx_v_reset_symbol_dict = ((int)1);
    }
    __pyx_v_timeout = values[3];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("query", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 10716, __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.QuestDB.query", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sql), (&PyUnicode_Type), 1, "sql", 1))) __PYX_ERR(0, 10718, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_14query(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self), __pyx_v_sql, __pyx_v_binds, __pyx_v_reset_symbol_dict, __pyx_v_timeout);
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_reset_symbol_dict, Py_True) < (0)) __PYX_ERR(0, 10716, __pyx_L1_error)
+10722:             object timeout=None):
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("query", 0, 1, 2, i); __PYX_ERR(0, 10716, __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(0, 10716, __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(0, 10716, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
/* … */
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_sql = ((PyObject*)values[0]);
    __pyx_v_binds = values[1];
    if (values[2]) {
      __pyx_v_reset_symbol_dict = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_reset_symbol_dict == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 10721, __pyx_L3_error)
    } else {
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_timeout, Py_None) < (0)) __PYX_ERR(0, 10716, __pyx_L1_error)
 10723:         """
 10724:         Execute a SQL query and return a :class:`QueryResult`.
 10725: 
 10726:         Egress goes through the QuestDB Wire Protocol (QWP/WebSocket)
 10727:         ``/read/v1`` endpoint. The reader is borrowed from the same
 10728:         connection pool that hosts the ingress writers and is returned to
 10729:         the pool when the returned :class:`QueryResult` is consumed or
 10730:         closed (a poisoned connection is dropped instead). Auth / TLS
 10731:         settings apply to both directions.
 10732: 
 10733:         To run several queries on one pooled connection, lease a
 10734:         :class:`PooledReader` with :meth:`reader` instead.
 10735: 
 10736:         :param sql: SQL text to execute. Forwarded verbatim to QuestDB.
 10737: 
 10738:         :param binds: Positional bind parameters matching the ``$1``..``$N``
 10739:             placeholders in ``sql``, as a list or tuple. Always prefer binds
 10740:             over interpolating values into the SQL text — they take no
 10741:             escaping and keep types exact. Supported Python types and their
 10742:             QuestDB bind types:
 10743: 
 10744:             - ``None`` → SQL NULL (bound as a VARCHAR null)
 10745:             - ``bool`` → BOOLEAN
 10746:             - ``int`` → LONG (must fit signed 64-bit)
 10747:             - ``float`` → DOUBLE
 10748:             - ``str`` → VARCHAR
 10749:             - ``datetime.datetime`` → TIMESTAMP (microseconds; a naive
 10750:               value is interpreted as UTC, the same rule as everywhere else
 10751:               in the API)
 10752:             - :class:`TimestampMicros` → TIMESTAMP
 10753:             - :class:`TimestampNanos` → TIMESTAMP_NS
 10754:             - ``datetime.date`` → DATE
 10755:             - ``decimal.Decimal`` → the narrowest DECIMAL that holds it,
 10756:               with its fractional digits as the scale (up to 76 digits and
 10757:               scale 76; NaN and infinities raise :class:`ValueError`)
 10758:             - ``uuid.UUID`` → UUID
 10759: 
 10760:             Any other type raises :class:`TypeError` naming the placeholder.
 10761: 
 10762:             .. code-block:: python
 10763: 
 10764:                 res = db.query(
 10765:                     'SELECT * FROM trades WHERE ts > $1 AND sym = $2',
 10766:                     [datetime.datetime(2026, 7, 1), 'BTC-USD'])
 10767: 
 10768:         :param reset_symbol_dict: When ``True`` (the default), the server
 10769:             resets the connection's SYMBOL dictionary before this query so it
 10770:             never inherits symbols from earlier queries on the pooled
 10771:             connection (query-scoped dict), avoiding cross-query dictionary
 10772:             bloat in ``to_polars()`` / ``to_pandas()``. Set ``False`` to keep
 10773:             the dictionary warm across repeated identical queries. No-op
 10774:             against servers that predate the capability.
 10775: 
 10776:         :param timeout: Run this query under its own budget instead of the
 10777:             server-wide ``query.timeout``, overriding the connect string's
 10778:             ``query_timeout_ms``. An ``int`` is milliseconds; a
 10779:             ``datetime.timedelta`` works too, with a positive value below
 10780:             one millisecond rounded *up* to 1 ms. ``None`` (the default)
 10781:             keeps the connect string's ``query_timeout_ms``; ``0`` clears
 10782:             it. Requires a server advertising ``CAP_QUERY_TIMEOUT``: against
 10783:             an older one a non-zero timeout is refused before anything is
 10784:             sent, with ``QuestDBErrorCode.UnsupportedServer``, rather than
 10785:             silently running under the server default; the connection is
 10786:             untouched, so pass ``timeout=0`` or raise the server's
 10787:             ``query.timeout`` instead. On expiry the error carries
 10788:             ``QuestDBErrorCode.QueryTimeout`` and the connection stays
 10789:             usable — but do not retry a write on it: a statement that
 10790:             outlives its timeout is reported as done instead, and a DDL /
 10791:             INSERT / UPDATE that timed out waiting for the table writer may
 10792:             still be applied.
 10793: 
 10794:         :return: A :class:`QueryResult`. Materialise it via
 10795:             ``iter_rows()``, ``to_pandas()``, ``to_arrow()``,
 10796:             ``iter_arrow()``, ``iter_pandas()``, or the
 10797:             ``__arrow_c_stream__`` PyCapsule protocol.
 10798: 
 10799:         Sentinel-value collisions in the result frame round-trip QuestDB's
 10800:         contract: ``INT64_MIN`` in a LONG column, NaN in DOUBLE / FLOAT,
 10801:         and the sentinel values for INT / DATE / TIMESTAMP /
 10802:         TIMESTAMP_NS / CHAR / UUID / LONG256 / IPV4 are all interpreted
 10803:         as NULL by QuestDB and cannot be distinguished from legitimate
 10804:         occurrences of those values. GEOHASH has no such sentinel, so a
 10805:         NULL GEOHASH stays distinct from every value.
 10806:         """
 10807:         # Borrow a reader from the same `questdb_db` pool that hosts
 10808:         # the ingress writers. The pool amortises TCP+TLS handshake
 10809:         # cost across many `QuestDB.query()` calls: the first call
 10810:         # opens a connection, subsequent calls hit the idle-list
 10811:         # cache. See `c-questdb-client/questdb-rs/src/ingress/
 10812:         # column_sender/db.rs` for the pool's structure.
 10813:         cdef _ReaderHandle reader_handle
 10814:         cdef _CursorHandle cursor_handle
 10815:         cdef questdb_db* db
+10816:         if sql is None:
  __pyx_t_1 = (__pyx_v_sql == ((PyObject*)Py_None));
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+10817:             raise TypeError(
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_query_requires_a_sql_string_to_r};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __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(0, 10817, __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(0, 10817, __pyx_L1_error)
 10818:                 'query() requires a sql string; to run several queries '
 10819:                 'on one pooled connection, lease a PooledReader with '
 10820:                 'reader() instead.')
+10821:         if binds is not None and not isinstance(binds, (list, tuple)):
  __pyx_t_5 = (__pyx_v_binds != Py_None);
  if (__pyx_t_5) {
  } else {
    __pyx_t_1 = __pyx_t_5;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_6 = PyList_Check(__pyx_v_binds); 
  if (!__pyx_t_6) {
  } else {
    __pyx_t_5 = __pyx_t_6;
    goto __pyx_L7_bool_binop_done;
  }
  __pyx_t_6 = PyTuple_Check(__pyx_v_binds); 
  __pyx_t_5 = __pyx_t_6;
  __pyx_L7_bool_binop_done:;
  __pyx_t_6 = (!__pyx_t_5);
  __pyx_t_1 = __pyx_t_6;
  __pyx_L5_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+10822:             raise TypeError(
    __pyx_t_3 = NULL;
+10823:                 '"binds" must be a list or tuple of positional bind '
    __pyx_t_7 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_binds_must_be_a_list_or_tuple_o, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 10823, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_7};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __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_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10822, __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(0, 10822, __pyx_L1_error)
+10824:                 f'parameters (or None), not {_fqn(type(binds))}')
    __pyx_t_7 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_binds)))); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 10824, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 10824, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+10825:         cdef int64_t timeout_ms = _query_timeout_to_millis(timeout)
  __pyx_t_9 = __pyx_f_7questdb_7_client__query_timeout_to_millis(__pyx_v_timeout); if (unlikely(__pyx_t_9 == ((int64_t)-2L))) __PYX_ERR(0, 10825, __pyx_L1_error)
  __pyx_v_timeout_ms = __pyx_t_9;
+10826:         db = self._begin_db_use('query')
  __pyx_t_10 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_query, NULL); if (unlikely(__pyx_t_10 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 10826, __pyx_L1_error)
  __pyx_v_db = __pyx_t_10;
+10827:         try:
  /*try:*/ {
+10828:             reader_handle = _borrow_reader_from_pool(db)
    __pyx_t_2 = ((PyObject *)__pyx_f_7questdb_7_client__borrow_reader_from_pool(__pyx_v_db)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10828, __pyx_L10_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_reader_handle = ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)__pyx_t_2);
    __pyx_t_2 = 0;
+10829:             reader_handle._oidc_auth = self._oidc_auth
    __pyx_t_2 = __pyx_v_self->_oidc_auth;
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __Pyx_GOTREF(__pyx_v_reader_handle->_oidc_auth);
    __Pyx_DECREF(__pyx_v_reader_handle->_oidc_auth);
    __pyx_v_reader_handle->_oidc_auth = __pyx_t_2;
    __pyx_t_2 = 0;
+10830:             reader_handle._bearer_token_provider = self._bearer_token_provider
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_bearer_token_provider); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10830, __pyx_L10_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_reader_handle), __pyx_mstate_global->__pyx_n_u_bearer_token_provider, __pyx_t_2) < (0)) __PYX_ERR(0, 10830, __pyx_L10_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+10831:             try:
    {
      /*try:*/ {
/* … */
      }
      __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;
      goto __pyx_L17_try_end;
      __pyx_L12_error:;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
      __pyx_L14_except_error:;
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      goto __pyx_L10_error;
      __pyx_L17_try_end:;
    }
  }
+10832:                 cursor_handle = _execute_query(
        __pyx_t_14.__pyx_n = 3;
        __pyx_t_14.reset_symbol_dict = __pyx_v_reset_symbol_dict;
        __pyx_t_14.owns_reader = 1;
        __pyx_t_14.timeout_ms = __pyx_v_timeout_ms;
        __pyx_t_2 = ((PyObject *)__pyx_f_7questdb_7_client__execute_query(__pyx_v_reader_handle, __pyx_v_sql, __pyx_v_binds, &__pyx_t_14)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10832, __pyx_L12_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_v_cursor_handle = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_2);
        __pyx_t_2 = 0;
 10833:                     reader_handle, sql, binds, reset_symbol_dict, True,
 10834:                     timeout_ms)
+10835:             except:
      /*except:*/ {
        __Pyx_AddTraceback("questdb._client.QuestDB.query", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_7, &__pyx_t_3) < 0) __PYX_ERR(0, 10835, __pyx_L14_except_error)
        __Pyx_XGOTREF(__pyx_t_2);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_3);
+10836:                 reader_handle._close()
        ((struct __pyx_vtabstruct_7questdb_7_client__ReaderHandle *)__pyx_v_reader_handle->__pyx_vtab)->_close(__pyx_v_reader_handle, NULL);
+10837:                 raise
        __Pyx_GIVEREF(__pyx_t_2);
        __Pyx_GIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_3);
        __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_7, __pyx_t_3);
        __pyx_t_2 = 0;  __pyx_t_7 = 0;  __pyx_t_3 = 0; 
        __PYX_ERR(0, 10837, __pyx_L14_except_error)
      }
 10838:         finally:
+10839:             self._end_db_use()
  /*finally:*/ {
    /*normal exit:*/{
      ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10839, __pyx_L1_error)
      goto __pyx_L11;
    }
    __pyx_L10_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
      if ( unlikely(__Pyx_GetException(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_18);
      __Pyx_XGOTREF(__pyx_t_19);
      __Pyx_XGOTREF(__pyx_t_20);
      __pyx_t_15 = __pyx_lineno; __pyx_t_16 = __pyx_clineno; __pyx_t_17 = __pyx_filename;
      {
        ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10839, __pyx_L21_error)
      }
      __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_13);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ErrRestore(__pyx_t_13, __pyx_t_12, __pyx_t_11);
      __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0;
      __pyx_lineno = __pyx_t_15; __pyx_clineno = __pyx_t_16; __pyx_filename = __pyx_t_17;
      goto __pyx_L1_error;
      __pyx_L21_error:;
      __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_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L11:;
  }
+10840:         return QueryResult(cursor_handle)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_7 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QueryResult); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10840, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2);
    assert(__pyx_t_7);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_7);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, ((PyObject *)__pyx_v_cursor_handle)};
    __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10840, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 10841: 
+10842:     def reader(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_17reader(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_7QuestDB_16reader, "\n        Borrow a context-managed :class:`PooledReader` lease from the pool.\n\n        The read-side twin of :meth:`sender`: the lease holds one pooled\n        reader connection for its lifetime and runs queries on it\n        sequentially via :meth:`PooledReader.query`.\n\n        .. code-block:: python\n\n            with db.reader() as r:\n                r1 = r.query('SELECT * FROM t1').to_pandas()\n                r2 = r.query(\n                    'SELECT * FROM t2',\n                    reset_symbol_dict=False).to_pandas()\n\n        The lease counts as an active use of the handle until it is\n        closed: :meth:`QuestDB.close` waits for outstanding leases for as\n        long as its ``timeout`` allows (a minute by default -- see\n        :meth:`close <QuestDB.close>`), and a lease keeps working while\n        the handle drains.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_7QuestDB_17reader = {"reader", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_17reader, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_16reader};
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_17reader(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
) {
  #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("reader (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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("reader", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("reader", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_16reader(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_16reader(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
  struct __pyx_obj_7questdb_7_client__ReaderHandle *__pyx_v_reader_handle = 0;
  struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_lease = 0;
  struct questdb_db *__pyx_v_db;
  int __pyx_v_db_use;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client.QuestDB.reader", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_reader_handle);
  __Pyx_XDECREF((PyObject *)__pyx_v_lease);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_17reader, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB_reader, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[216])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 10842, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_reader, __pyx_t_17) < (0)) __PYX_ERR(0, 10842, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 10843:         """
 10844:         Borrow a context-managed :class:`PooledReader` lease from the pool.
 10845: 
 10846:         The read-side twin of :meth:`sender`: the lease holds one pooled
 10847:         reader connection for its lifetime and runs queries on it
 10848:         sequentially via :meth:`PooledReader.query`.
 10849: 
 10850:         .. code-block:: python
 10851: 
 10852:             with db.reader() as r:
 10853:                 r1 = r.query('SELECT * FROM t1').to_pandas()
 10854:                 r2 = r.query(
 10855:                     'SELECT * FROM t2',
 10856:                     reset_symbol_dict=False).to_pandas()
 10857: 
 10858:         The lease counts as an active use of the handle until it is
 10859:         closed: :meth:`QuestDB.close` waits for outstanding leases for as
 10860:         long as its ``timeout`` allows (a minute by default -- see
 10861:         :meth:`close <QuestDB.close>`), and a lease keeps working while
 10862:         the handle drains.
 10863:         """
 10864:         cdef _ReaderHandle reader_handle
 10865:         cdef PooledReader lease
 10866:         cdef questdb_db* db
+10867:         cdef bint db_use = False
  __pyx_v_db_use = 0;
+10868:         db = self._begin_db_use('reader', scoped=False)
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.scoped = 0;
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_reader, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 10868, __pyx_L1_error)
  __pyx_v_db = __pyx_t_1;
+10869:         db_use = True
  __pyx_v_db_use = 1;
+10870:         try:
  /*try:*/ {
+10871:             reader_handle = _borrow_reader_from_pool(db)
    __pyx_t_3 = ((PyObject *)__pyx_f_7questdb_7_client__borrow_reader_from_pool(__pyx_v_db)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10871, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_reader_handle = ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)__pyx_t_3);
    __pyx_t_3 = 0;
+10872:             reader_handle._oidc_auth = self._oidc_auth
    __pyx_t_3 = __pyx_v_self->_oidc_auth;
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __Pyx_GOTREF(__pyx_v_reader_handle->_oidc_auth);
    __Pyx_DECREF(__pyx_v_reader_handle->_oidc_auth);
    __pyx_v_reader_handle->_oidc_auth = __pyx_t_3;
    __pyx_t_3 = 0;
+10873:             reader_handle._bearer_token_provider = self._bearer_token_provider
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_bearer_token_provider); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10873, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_reader_handle), __pyx_mstate_global->__pyx_n_u_bearer_token_provider, __pyx_t_3) < (0)) __PYX_ERR(0, 10873, __pyx_L4_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+10874:             lease = PooledReader.__new__(PooledReader)
    __pyx_t_3 = ((PyObject *)__pyx_tp_new_7questdb_7_client_PooledReader(((PyTypeObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledReader), __pyx_mstate_global->__pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 10874, __pyx_L4_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_3);
    __pyx_v_lease = ((struct __pyx_obj_7questdb_7_client_PooledReader *)__pyx_t_3);
    __pyx_t_3 = 0;
+10875:             lease._attach(self, reader_handle)
    ((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_lease->__pyx_vtab)->_attach(__pyx_v_lease, __pyx_v_self, __pyx_v_reader_handle);
+10876:             db_use = False
    __pyx_v_db_use = 0;
+10877:             return lease
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_lease);
    __pyx_r = ((PyObject *)__pyx_v_lease);
    goto __pyx_L3_return;
  }
 10878:         finally:
+10879:             if db_use:
  /*finally:*/ {
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
      if ( unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
      {
        if (__pyx_v_db_use) {
/* … */
        }
      }
      __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);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
      __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
      __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6;
      goto __pyx_L1_error;
      __pyx_L7_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);
      __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_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L3_return: {
      __pyx_t_12 = __pyx_r;
      __pyx_r = 0;
      if (__pyx_v_db_use) {
/* … */
      }
      __pyx_r = __pyx_t_12;
      __pyx_t_12 = 0;
      goto __pyx_L0;
    }
  }
+10880:                 self._end_db_use(scoped=False)
          __pyx_t_13.__pyx_n = 1;
          __pyx_t_13.scoped = 0;
          ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, &__pyx_t_13); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10880, __pyx_L7_error)
/* … */
        __pyx_t_13.__pyx_n = 1;
        __pyx_t_13.scoped = 0;
        ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, &__pyx_t_13); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10880, __pyx_L1_error)
 10881: 
+10882:     def server_info(self) -> ServerInfo:
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_19server_info(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_7QuestDB_18server_info, "\n        Return a :class:`ServerInfo` snapshot of the server's\n        ``SERVER_INFO`` handshake: cluster role, failover epoch,\n        negotiated capabilities, handshake wall-clock, and cluster/node\n        identifiers.\n\n        A reader is borrowed from the connection pool (opening one on\n        first use, exactly like :meth:`query`), sampled, and returned to\n        the pool. The snapshot describes that connection at its last\n        handshake; a later failover is reflected only in snapshots taken\n        after it.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_7QuestDB_19server_info = {"server_info", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_19server_info, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_18server_info};
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_19server_info(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
) {
  #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("server_info (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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("server_info", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("server_info", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_18server_info(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_18server_info(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
  struct __pyx_obj_7questdb_7_client__ReaderHandle *__pyx_v_reader_handle = 0;
  struct questdb_db *__pyx_v_db;
  PyObject *__pyx_v_info = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client.QuestDB.server_info", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_reader_handle);
  __Pyx_XDECREF(__pyx_v_info);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 10882, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_ServerInfo) < (0)) __PYX_ERR(0, 10882, __pyx_L1_error)
  __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_19server_info, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB_server_info, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[217])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 10882, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_25, __pyx_t_17);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_server_info, __pyx_t_25) < (0)) __PYX_ERR(0, 10882, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 10883:         """
 10884:         Return a :class:`ServerInfo` snapshot of the server's
 10885:         ``SERVER_INFO`` handshake: cluster role, failover epoch,
 10886:         negotiated capabilities, handshake wall-clock, and cluster/node
 10887:         identifiers.
 10888: 
 10889:         A reader is borrowed from the connection pool (opening one on
 10890:         first use, exactly like :meth:`query`), sampled, and returned to
 10891:         the pool. The snapshot describes that connection at its last
 10892:         handshake; a later failover is reflected only in snapshots taken
 10893:         after it.
 10894:         """
 10895:         cdef _ReaderHandle reader_handle
 10896:         cdef questdb_db* db
+10897:         db = self._begin_db_use('server_info')
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_server_info, NULL); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 10897, __pyx_L1_error)
  __pyx_v_db = __pyx_t_1;
+10898:         try:
  /*try:*/ {
+10899:             reader_handle = _borrow_reader_from_pool(db)
    __pyx_t_2 = ((PyObject *)__pyx_f_7questdb_7_client__borrow_reader_from_pool(__pyx_v_db)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10899, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_reader_handle = ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)__pyx_t_2);
    __pyx_t_2 = 0;
+10900:             info = _snapshot_server_info(reader_handle)
    __pyx_t_2 = __pyx_f_7questdb_7_client__snapshot_server_info(__pyx_v_reader_handle); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10900, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_info = __pyx_t_2;
    __pyx_t_2 = 0;
+10901:             reader_handle._close()
    ((struct __pyx_vtabstruct_7questdb_7_client__ReaderHandle *)__pyx_v_reader_handle->__pyx_vtab)->_close(__pyx_v_reader_handle, NULL);
  }
 10902:         finally:
+10903:             self._end_db_use()
  /*finally:*/ {
    /*normal exit:*/{
      ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10903, __pyx_L1_error)
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
      if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
      {
        ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10903, __pyx_L7_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);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
      __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
      __pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
      goto __pyx_L1_error;
      __pyx_L7_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);
      __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_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }
+10904:         return info
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_info);
  __pyx_r = __pyx_v_info;
  goto __pyx_L0;
 10905: 
+10906:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_25connection_events_dropped_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_25connection_events_dropped_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_25connection_events_dropped___get__(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_25connection_events_dropped___get__(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
  struct questdb_db *__pyx_v_db;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client.QuestDB.connection_events_dropped.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 10907:     def connection_events_dropped(self) -> int:
 10908:         """
 10909:         Total connection events discarded by the listener inbox's
 10910:         drop-oldest policy. ``0`` when no listener is registered.
 10911:         """
+10912:         cdef questdb_db* db = self._begin_db_use('connection_events_dropped')
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_connection_events_dropped, NULL); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 10912, __pyx_L1_error)
  __pyx_v_db = __pyx_t_1;
+10913:         try:
  /*try:*/ {
+10914:             return questdb_db_connection_events_dropped(db)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __Pyx_PyLong_From_uint64_t(questdb_db_connection_events_dropped(__pyx_v_db)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10914, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L3_return;
  }
 10915:         finally:
+10916:             self._end_db_use()
  /*finally:*/ {
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
      if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
      {
        ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10916, __pyx_L7_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);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
      __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
      __pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
      goto __pyx_L1_error;
      __pyx_L7_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);
      __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_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L3_return: {
      __pyx_t_11 = __pyx_r;
      __pyx_r = 0;
      ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10916, __pyx_L1_error)
      __pyx_r = __pyx_t_11;
      __pyx_t_11 = 0;
      goto __pyx_L0;
    }
  }
 10917: 
+10918:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_27connection_events_delivered_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_27connection_events_delivered_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_27connection_events_delivered___get__(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_27connection_events_delivered___get__(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
  struct questdb_db *__pyx_v_db;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client.QuestDB.connection_events_delivered.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 10919:     def connection_events_delivered(self) -> int:
 10920:         """
 10921:         Total connection events delivered to the listener. ``0`` when no
 10922:         listener is registered.
 10923:         """
+10924:         cdef questdb_db* db = self._begin_db_use('connection_events_delivered')
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_connection_events_delivered, NULL); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 10924, __pyx_L1_error)
  __pyx_v_db = __pyx_t_1;
+10925:         try:
  /*try:*/ {
+10926:             return questdb_db_connection_events_delivered(db)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __Pyx_PyLong_From_uint64_t(questdb_db_connection_events_delivered(__pyx_v_db)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10926, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L3_return;
  }
 10927:         finally:
+10928:             self._end_db_use()
  /*finally:*/ {
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
      if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
      {
        ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10928, __pyx_L7_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);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
      __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
      __pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
      goto __pyx_L1_error;
      __pyx_L7_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);
      __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_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L3_return: {
      __pyx_t_11 = __pyx_r;
      __pyx_r = 0;
      ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10928, __pyx_L1_error)
      __pyx_r = __pyx_t_11;
      __pyx_t_11 = 0;
      goto __pyx_L0;
    }
  }
 10929: 
+10930:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_22error_events_delivered_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_22error_events_delivered_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_22error_events_delivered___get__(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_22error_events_delivered___get__(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
  struct questdb_db *__pyx_v_db;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client.QuestDB.error_events_delivered.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 10931:     def error_events_delivered(self) -> int:
 10932:         """
 10933:         Total server rejections delivered to the ``error_handler``
 10934:         (or to the default logging handler when none was registered).
 10935:         """
+10936:         cdef questdb_db* db = self._begin_db_use('error_events_delivered')
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_error_events_delivered, NULL); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 10936, __pyx_L1_error)
  __pyx_v_db = __pyx_t_1;
+10937:         try:
  /*try:*/ {
+10938:             return questdb_db_rejection_events_delivered(db)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __Pyx_PyLong_From_uint64_t(questdb_db_rejection_events_delivered(__pyx_v_db)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10938, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L3_return;
  }
 10939:         finally:
+10940:             self._end_db_use()
  /*finally:*/ {
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
      if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
      {
        ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10940, __pyx_L7_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);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
      __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
      __pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
      goto __pyx_L1_error;
      __pyx_L7_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);
      __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_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L3_return: {
      __pyx_t_11 = __pyx_r;
      __pyx_r = 0;
      ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10940, __pyx_L1_error)
      __pyx_r = __pyx_t_11;
      __pyx_t_11 = 0;
      goto __pyx_L0;
    }
  }
 10941: 
+10942:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_20error_events_dropped_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_20error_events_dropped_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_20error_events_dropped___get__(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_20error_events_dropped___get__(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
  struct questdb_db *__pyx_v_db;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client.QuestDB.error_events_dropped.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 10943:     def error_events_dropped(self) -> int:
 10944:         """
 10945:         Total server rejections discarded by the handler inbox's
 10946:         drop-oldest policy.
 10947:         """
+10948:         cdef questdb_db* db = self._begin_db_use('error_events_dropped')
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_error_events_dropped, NULL); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 10948, __pyx_L1_error)
  __pyx_v_db = __pyx_t_1;
+10949:         try:
  /*try:*/ {
+10950:             return questdb_db_rejection_events_dropped(db)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __Pyx_PyLong_From_uint64_t(questdb_db_rejection_events_dropped(__pyx_v_db)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10950, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L3_return;
  }
 10951:         finally:
+10952:             self._end_db_use()
  /*finally:*/ {
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
      if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
      {
        ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10952, __pyx_L7_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);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
      __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
      __pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
      goto __pyx_L1_error;
      __pyx_L7_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);
      __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_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L3_return: {
      __pyx_t_11 = __pyx_r;
      __pyx_r = 0;
      ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10952, __pyx_L1_error)
      __pyx_r = __pyx_t_11;
      __pyx_t_11 = 0;
      goto __pyx_L0;
    }
  }
 10953: 
+10954:     def reap_idle(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_21reap_idle(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_7QuestDB_20reap_idle, "\n        Manually reap idle above-pool-size connections.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_7QuestDB_21reap_idle = {"reap_idle", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_21reap_idle, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_20reap_idle};
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_21reap_idle(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
) {
  #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("reap_idle (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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("reap_idle", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("reap_idle", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_20reap_idle(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_7QuestDB_20reap_idle(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
  size_t __pyx_v_closed;
  PyThreadState *__pyx_v_gs;
  struct questdb_db *__pyx_v_db;
  int __pyx_v_db_use;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client.QuestDB.reap_idle", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_21reap_idle, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB_reap_idle, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[218])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 10954, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_reap_idle, __pyx_t_25) < (0)) __PYX_ERR(0, 10954, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 10955:         """
 10956:         Manually reap idle above-pool-size connections.
 10957:         """
 10958:         cdef size_t closed
+10959:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+10960:         cdef questdb_db* db = NULL
  __pyx_v_db = NULL;
+10961:         cdef bint db_use = False
  __pyx_v_db_use = 0;
+10962:         db = self._begin_db_use('reap_idle')
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_begin_db_use(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_reap_idle, NULL); if (unlikely(__pyx_t_1 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 10962, __pyx_L1_error)
  __pyx_v_db = __pyx_t_1;
+10963:         db_use = True
  __pyx_v_db_use = 1;
+10964:         try:
  /*try:*/ {
+10965:             _ensure_doesnt_have_gil(&gs)
    (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+10966:             closed = questdb_db_reap_idle(db)
    __pyx_v_closed = questdb_db_reap_idle(__pyx_v_db);
+10967:             _ensure_has_gil(&gs)
    __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+10968:             return closed
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __Pyx_PyLong_FromSize_t(__pyx_v_closed); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10968, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L3_return;
  }
 10969:         finally:
+10970:             _ensure_has_gil(&gs)
  /*finally:*/ {
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
      if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
      {
        __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
/* … */
      __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+10971:             if db_use:
        if (__pyx_v_db_use) {
/* … */
        }
      }
      __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_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
      __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
      __pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
      goto __pyx_L1_error;
      __pyx_L7_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);
      __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_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L3_return: {
      __pyx_t_11 = __pyx_r;
      __pyx_r = 0;
/* … */
      if (__pyx_v_db_use) {
/* … */
      }
      __pyx_r = __pyx_t_11;
      __pyx_t_11 = 0;
      goto __pyx_L0;
    }
  }
+10972:                 self._end_db_use()
          ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10972, __pyx_L7_error)
/* … */
        ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_end_db_use(__pyx_v_self, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 10972, __pyx_L1_error)
 10973: 
+10974:     cpdef close(self, object timeout=_CLOSE_TIMEOUT_DEFAULT):
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_23close(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 PyObject *__pyx_f_7questdb_7_client_7QuestDB_close(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_7questdb_7_client_7QuestDB_close *__pyx_optional_args) {
  PyObject *__pyx_v_timeout = __pyx_mstate_global->__pyx_k__39;
  struct questdb_db *__pyx_v_db;
  PyThreadState *__pyx_v_gs;
  int __pyx_v_closed;
  int __pyx_v_locked;
  PyObject *__pyx_v_interrupt = 0;
  int __pyx_v_notice;
  size_t __pyx_v_notice_leases;
  size_t __pyx_v_notice_calls;
  PyObject *__pyx_v_lease_limit = 0;
  PyObject *__pyx_v_call_limit = 0;
  int __pyx_v_in_callback;
  int __pyx_v_already_closing;
  int __pyx_v_callback_bound;
  PyObject *__pyx_v_callback_deadline = 0;
  PyObject *__pyx_v_oidc_auth = NULL;
  PyObject *__pyx_v_started = NULL;
  PyObject *__pyx_v_lease_deadline = NULL;
  PyObject *__pyx_v_call_deadline = NULL;
  PyObject *__pyx_v_msg = NULL;
  PyObject *__pyx_v_next_notice = NULL;
  PyObject *__pyx_v_deadline = NULL;
  PyObject *__pyx_v_now = NULL;
  PyObject *__pyx_v_wait_s = NULL;
  PyObject *__pyx_v_remaining = NULL;
  PyObject *__pyx_v_exc = NULL;
  PyObject *__pyx_r = NULL;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_timeout = __pyx_optional_args->timeout;
    }
  }
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_close); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10974, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7questdb_7_client_7QuestDB_23close)) {
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_timeout};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __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_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 10974, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }
/* … */
  /* 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_8);
  __Pyx_XDECREF(__pyx_t_21);
  __Pyx_AddTraceback("questdb._client.QuestDB.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_interrupt);
  __Pyx_XDECREF(__pyx_v_lease_limit);
  __Pyx_XDECREF(__pyx_v_call_limit);
  __Pyx_XDECREF(__pyx_v_callback_deadline);
  __Pyx_XDECREF(__pyx_v_oidc_auth);
  __Pyx_XDECREF(__pyx_v_started);
  __Pyx_XDECREF(__pyx_v_lease_deadline);
  __Pyx_XDECREF(__pyx_v_call_deadline);
  __Pyx_XDECREF(__pyx_v_msg);
  __Pyx_XDECREF(__pyx_v_next_notice);
  __Pyx_XDECREF(__pyx_v_deadline);
  __Pyx_XDECREF(__pyx_v_now);
  __Pyx_XDECREF(__pyx_v_wait_s);
  __Pyx_XDECREF(__pyx_v_remaining);
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_23close(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_7QuestDB_22close, "\n        Close the client and its connection pool.\n\n        Closing is one-way. Once a ``close()`` proceeds -- rather\n        than being refused outright, as from inside one of the\n        handle's own calls or callbacks -- the handle refuses new\n        work: ``sender()``, ``reader()``, ``dataframe()``, ``query()``\n        and the rest raise. Work already in flight drains: a call in\n        progress runs to completion, and an outstanding lease keeps\n        working until its holder closes it. The one exception is\n        :meth:`PooledSender.dataframe`, which forwards to\n        :meth:`dataframe` over a connection of its own from the pool,\n        so a load started through a lease after ``close()`` is new work\n        and is refused like any other. The native pool is torn down by\n        the first ``close()`` that finds nothing using the handle, or\n        when the handle itself is collected.\n\n        Calls on the handle and on its leases are counted per OS\n        thread. With greenlets -- gevent, eventlet, or ``greenlet``\n        used directly -- all greenlets on one thread count as one\n        caller, so ``close()`` is also refused while another greenlet\n        on the same thread is suspended inside a call on the handle or\n        on one of its leases. See :ref:`sender_threading`.\n\n        ``timeout`` sets how long this call waits for that drain.\n        Calls are the handle's own methods in progress, such as\n        ``dataframe()`` and ``query()``; anything done through a lease\n        counts as that lease, including a long ``lease.dataframe()``\n        already running when ``close()`` starts.\n\n        - Left out: a call in progress is waited for until it\n          returns, and an outstanding lease for up to a minute. A long\n          load through a lease needs a larger ``timeout``, or ``None``.\n        - A number of seconds: calls and leases alike are waited for\n          up to that long. ``0`` closes only if nothing is in fli""ght.\n        - ``None``: calls and leases alike are waited for until they\n          are done.\n\n        ``close()`` cannot interrupt a call in progress. A\n        ``dataframe()`` reading a stream that never ends, or one\n        waiting on the very thread that calls ``close()``, keeps it\n        waiting until ``timeout`` runs out -- and, with no limit on\n        calls, for ever. A lease comes back only when its holder\n        closes it, so one held by the calling thread, or by a thread\n        that has since finished, never will: close every lease before\n        closing the handle.\n\n        When the limit runs out, this call raises\n        :class:`QuestDBError <questdb.QuestDBError>` with ``code`` set\n        to ``QuestDBErrorCode.InvalidApiCall``, naming how many leases\n        and calls are still outstanding. The handle stays closing --\n        it never goes back to open -- and a later ``close()``, with\n        any ``timeout``, resumes the wait and finishes the teardown\n        once the last of them is done. Waiting for a concurrent\n        ``close()`` on another thread to finish its teardown is\n        limited too: a number of seconds covers that wait and the\n        drain together; left out, that wait gets a minute of its own;\n        ``None`` puts no limit on it.\n\n        ``timeout`` covers only this waiting. The teardown then spends\n        up to ``close_flush_timeout_millis`` (5 seconds by default)\n        draining each sender's queue. An in-memory queue drops whatever\n        it has not delivered by then; a disk-backed queue (``sf_dir``)\n        keeps it for replay on restart. The drop is not reported to\n        Python: it raises nothing and logs nothing through the\n        ``questdb`` logger. To be sure rows have arrived, close each\n        lease with ``close(wait=True)`` before closing the handle.\n\n        While it waits, it reports what it is still waiting for\n        through the ``questdb`` logger at ``WARNING``: every fi""ve\n        seconds for the first minute, then once a minute.\n\n        A number of seconds is a budget for the whole close,\n        including the close a ``with`` block makes on its way out:\n        when the most recent ``close()`` on the handle was given one,\n        leaving the block waits only for what is left of it, and not\n        at all once it has run out. To bound leaving a ``with`` block,\n        call ``close(timeout=...)`` as the block's last statement.\n        Otherwise, leaving the block closes with the limits of a\n        ``close()`` with no arguments.\n\n        Idempotent: closing a closed handle returns without doing\n        anything, and no ``close()`` returns success unless the\n        teardown has run -- when several race, one of them runs it and\n        the others return once it is done.\n\n        When called from inside one of this handle's own\n        ``error_handler`` / ``connection_listener`` callbacks, it\n        never waits -- while the callback runs, that thread delivers\n        nothing, including whatever a wait would need. It closes\n        immediately when nothing is using the handle; it refuses when\n        leases or calls are outstanding (close from another thread to\n        wait for the drain); and when a concurrent ``close()`` is\n        already running it returns without waiting, possibly before\n        that close finishes -- the handle only moves toward closed,\n        never back to open.\n\n        A persistence-warning handler for this handle's OIDC provider may\n        not close it: called from the handler, ``close()`` raises\n        :class:`QuestDBError <questdb.QuestDBError>` with ``code`` set to\n        ``QuestDBErrorCode.InvalidApiCall`` instead of waiting for the\n        worker delivering the warning or for its leases. A close on any\n        other thread first waits for such a handler to return, and gives\n        up with the same error after two seconds without starting to\n        close -- whic""h is how a close that the handler delegated to\n        another thread, and waits for, is released. Called from any other\n        OIDC callback -- a renderer callback, or a persistence-warning\n        handler of another provider -- or from a ``bearer_token_provider=``\n        call, each wait above is limited to two seconds, after which it\n        raises the same error and leaves the handle closing: a lease or\n        call on another thread may be blocked on a token the provider\n        cannot supply until the callback returns.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_7QuestDB_23close = {"close", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_23close, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_22close};
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_23close(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_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("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_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(0, 10974, __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(0, 10974, __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(0, 10974, __pyx_L3_error)
      if (!values[0]) values[0] = __Pyx_NewRef(__pyx_mstate_global->__pyx_k__39);
    } else {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 10974, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[0]) values[0] = __Pyx_NewRef(__pyx_mstate_global->__pyx_k__39);
    }
    __pyx_v_timeout = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("close", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 10974, __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.QuestDB.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_22close(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_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_7QuestDB_22close(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self, PyObject *__pyx_v_timeout) {
  PyObject *__pyx_r = NULL;
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.timeout = __pyx_v_timeout;
  __pyx_t_1 = __pyx_vtabptr_7questdb_7_client_QuestDB->close(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 10974, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client.QuestDB.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_CLOSE_TIMEOUT_DEFAULT); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 10974, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __pyx_mstate_global->__pyx_k__39 = __pyx_t_25;
  __Pyx_GIVEREF(__pyx_t_25);
  __pyx_t_25 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_CLOSE_TIMEOUT_DEFAULT); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 10974, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __pyx_t_17 = PyTuple_Pack(1, __pyx_t_25); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 10974, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_23close, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB_close, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[219])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 10974, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_25, __pyx_t_17);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_close, __pyx_t_25) < (0)) __PYX_ERR(0, 10974, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
/* … */
struct __pyx_opt_args_7questdb_7_client_7QuestDB_close {
  int __pyx_n;
  PyObject *timeout;
};
 10975:         """
 10976:         Close the client and its connection pool.
 10977: 
 10978:         Closing is one-way. Once a ``close()`` proceeds -- rather
 10979:         than being refused outright, as from inside one of the
 10980:         handle's own calls or callbacks -- the handle refuses new
 10981:         work: ``sender()``, ``reader()``, ``dataframe()``, ``query()``
 10982:         and the rest raise. Work already in flight drains: a call in
 10983:         progress runs to completion, and an outstanding lease keeps
 10984:         working until its holder closes it. The one exception is
 10985:         :meth:`PooledSender.dataframe`, which forwards to
 10986:         :meth:`dataframe` over a connection of its own from the pool,
 10987:         so a load started through a lease after ``close()`` is new work
 10988:         and is refused like any other. The native pool is torn down by
 10989:         the first ``close()`` that finds nothing using the handle, or
 10990:         when the handle itself is collected.
 10991: 
 10992:         Calls on the handle and on its leases are counted per OS
 10993:         thread. With greenlets -- gevent, eventlet, or ``greenlet``
 10994:         used directly -- all greenlets on one thread count as one
 10995:         caller, so ``close()`` is also refused while another greenlet
 10996:         on the same thread is suspended inside a call on the handle or
 10997:         on one of its leases. See :ref:`sender_threading`.
 10998: 
 10999:         ``timeout`` sets how long this call waits for that drain.
 11000:         Calls are the handle's own methods in progress, such as
 11001:         ``dataframe()`` and ``query()``; anything done through a lease
 11002:         counts as that lease, including a long ``lease.dataframe()``
 11003:         already running when ``close()`` starts.
 11004: 
 11005:         - Left out: a call in progress is waited for until it
 11006:           returns, and an outstanding lease for up to a minute. A long
 11007:           load through a lease needs a larger ``timeout``, or ``None``.
 11008:         - A number of seconds: calls and leases alike are waited for
 11009:           up to that long. ``0`` closes only if nothing is in flight.
 11010:         - ``None``: calls and leases alike are waited for until they
 11011:           are done.
 11012: 
 11013:         ``close()`` cannot interrupt a call in progress. A
 11014:         ``dataframe()`` reading a stream that never ends, or one
 11015:         waiting on the very thread that calls ``close()``, keeps it
 11016:         waiting until ``timeout`` runs out -- and, with no limit on
 11017:         calls, for ever. A lease comes back only when its holder
 11018:         closes it, so one held by the calling thread, or by a thread
 11019:         that has since finished, never will: close every lease before
 11020:         closing the handle.
 11021: 
 11022:         When the limit runs out, this call raises
 11023:         :class:`QuestDBError <questdb.QuestDBError>` with ``code`` set
 11024:         to ``QuestDBErrorCode.InvalidApiCall``, naming how many leases
 11025:         and calls are still outstanding. The handle stays closing --
 11026:         it never goes back to open -- and a later ``close()``, with
 11027:         any ``timeout``, resumes the wait and finishes the teardown
 11028:         once the last of them is done. Waiting for a concurrent
 11029:         ``close()`` on another thread to finish its teardown is
 11030:         limited too: a number of seconds covers that wait and the
 11031:         drain together; left out, that wait gets a minute of its own;
 11032:         ``None`` puts no limit on it.
 11033: 
 11034:         ``timeout`` covers only this waiting. The teardown then spends
 11035:         up to ``close_flush_timeout_millis`` (5 seconds by default)
 11036:         draining each sender's queue. An in-memory queue drops whatever
 11037:         it has not delivered by then; a disk-backed queue (``sf_dir``)
 11038:         keeps it for replay on restart. The drop is not reported to
 11039:         Python: it raises nothing and logs nothing through the
 11040:         ``questdb`` logger. To be sure rows have arrived, close each
 11041:         lease with ``close(wait=True)`` before closing the handle.
 11042: 
 11043:         While it waits, it reports what it is still waiting for
 11044:         through the ``questdb`` logger at ``WARNING``: every five
 11045:         seconds for the first minute, then once a minute.
 11046: 
 11047:         A number of seconds is a budget for the whole close,
 11048:         including the close a ``with`` block makes on its way out:
 11049:         when the most recent ``close()`` on the handle was given one,
 11050:         leaving the block waits only for what is left of it, and not
 11051:         at all once it has run out. To bound leaving a ``with`` block,
 11052:         call ``close(timeout=...)`` as the block's last statement.
 11053:         Otherwise, leaving the block closes with the limits of a
 11054:         ``close()`` with no arguments.
 11055: 
 11056:         Idempotent: closing a closed handle returns without doing
 11057:         anything, and no ``close()`` returns success unless the
 11058:         teardown has run -- when several race, one of them runs it and
 11059:         the others return once it is done.
 11060: 
 11061:         When called from inside one of this handle's own
 11062:         ``error_handler`` / ``connection_listener`` callbacks, it
 11063:         never waits -- while the callback runs, that thread delivers
 11064:         nothing, including whatever a wait would need. It closes
 11065:         immediately when nothing is using the handle; it refuses when
 11066:         leases or calls are outstanding (close from another thread to
 11067:         wait for the drain); and when a concurrent ``close()`` is
 11068:         already running it returns without waiting, possibly before
 11069:         that close finishes -- the handle only moves toward closed,
 11070:         never back to open.
 11071: 
 11072:         A persistence-warning handler for this handle's OIDC provider may
 11073:         not close it: called from the handler, ``close()`` raises
 11074:         :class:`QuestDBError <questdb.QuestDBError>` with ``code`` set to
 11075:         ``QuestDBErrorCode.InvalidApiCall`` instead of waiting for the
 11076:         worker delivering the warning or for its leases. A close on any
 11077:         other thread first waits for such a handler to return, and gives
 11078:         up with the same error after two seconds without starting to
 11079:         close -- which is how a close that the handler delegated to
 11080:         another thread, and waits for, is released. Called from any other
 11081:         OIDC callback -- a renderer callback, or a persistence-warning
 11082:         handler of another provider -- or from a ``bearer_token_provider=``
 11083:         call, each wait above is limited to two seconds, after which it
 11084:         raises the same error and leaves the handle closing: a lease or
 11085:         call on another thread may be blocked on a token the provider
 11086:         cannot supply until the callback returns.
 11087:         """
+11088:         cdef questdb_db* db = NULL
  __pyx_v_db = NULL;
+11089:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+11090:         cdef bint closed = False
  __pyx_v_closed = 0;
+11091:         cdef bint locked = False
  __pyx_v_locked = 0;
+11092:         cdef object interrupt = None
  __Pyx_INCREF(Py_None);
  __pyx_v_interrupt = Py_None;
+11093:         cdef bint notice = False
  __pyx_v_notice = 0;
+11094:         cdef size_t notice_leases = 0
  __pyx_v_notice_leases = 0;
+11095:         cdef size_t notice_calls = 0
  __pyx_v_notice_calls = 0;
 11096:         cdef object lease_limit
 11097:         cdef object call_limit
+11098:         cdef bint in_callback = False
  __pyx_v_in_callback = 0;
+11099:         cdef bint already_closing = False
  __pyx_v_already_closing = 0;
+11100:         cdef bint callback_bound = False
  __pyx_v_callback_bound = 0;
+11101:         cdef object callback_deadline = None
  __Pyx_INCREF(Py_None);
  __pyx_v_callback_deadline = Py_None;
 11102:         # Read before anything is published, so a bad argument changes
 11103:         # nothing for any other thread.
+11104:         if timeout is _CLOSE_TIMEOUT_DEFAULT:
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_CLOSE_TIMEOUT_DEFAULT); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11104, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = (__pyx_v_timeout == __pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_6) {
/* … */
    goto __pyx_L3;
  }
+11105:             lease_limit = _CLOSE_LEASE_WAIT_LIMIT_S
    __pyx_t_1 = PyFloat_FromDouble(__pyx_v_7questdb_7_client__CLOSE_LEASE_WAIT_LIMIT_S); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11105, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_lease_limit = __pyx_t_1;
    __pyx_t_1 = 0;
+11106:             call_limit = None
    __Pyx_INCREF(Py_None);
    __pyx_v_call_limit = Py_None;
+11107:         elif timeout is None:
  __pyx_t_6 = (__pyx_v_timeout == Py_None);
  if (__pyx_t_6) {
/* … */
    goto __pyx_L3;
  }
+11108:             lease_limit = None
    __Pyx_INCREF(Py_None);
    __pyx_v_lease_limit = Py_None;
+11109:             call_limit = None
    __Pyx_INCREF(Py_None);
    __pyx_v_call_limit = Py_None;
 11110:         else:
+11111:             lease_limit = _close_timeout_seconds(timeout)
  /*else*/ {
    __pyx_t_7 = __pyx_f_7questdb_7_client__close_timeout_seconds(__pyx_v_timeout); if (unlikely(__PYX_CHECK_FLOAT_EXCEPTION(__pyx_t_7, ((double)(-1.0))))) __PYX_ERR(0, 11111, __pyx_L1_error)
    __pyx_t_1 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11111, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_lease_limit = __pyx_t_1;
    __pyx_t_1 = 0;
+11112:             call_limit = lease_limit
    __Pyx_INCREF(__pyx_v_lease_limit);
    __pyx_v_call_limit = __pyx_v_lease_limit;
  }
  __pyx_L3:;
+11113:         oidc_auth = self._oidc_auth
  __pyx_t_1 = __pyx_v_self->_oidc_auth;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_oidc_auth = __pyx_t_1;
  __pyx_t_1 = 0;
+11114:         if _oidc_diagnostic_on_this_thread(oidc_auth):
  __pyx_t_6 = __pyx_f_7questdb_7_client__oidc_diagnostic_on_this_thread(__pyx_v_oidc_auth); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 11114, __pyx_L1_error)
  if (unlikely(__pyx_t_6)) {
/* … */
  }
+11115:             raise QuestDBError(
    __pyx_t_2 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11115, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+11116:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11116, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11116, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __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[3] = {__pyx_t_2, __pyx_t_8, __pyx_mstate_global->__pyx_kp_u_QuestDB_close_cannot_run_inside};
      __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_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11115, __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(0, 11115, __pyx_L1_error)
 11117:                 'QuestDB.close() cannot run inside its OIDC provider\'s '
 11118:                 'persistence-warning callback. Return from the callback '
 11119:                 'before closing the pool.')
 11120:         # Any other OIDC callback on this thread -- a renderer event, or
 11121:         # another provider's persistence warning -- or a bearer token-provider
 11122:         # call may be what a lease or call on another thread is waiting for:
 11123:         # its ACK can need a token the provider cannot supply until the
 11124:         # callback returns. Every wait below is bounded then, as
 11125:         # `PooledSender._lock_enter()` bounds a wait for the lease.
+11126:         in_callback = _in_bounded_wait_callback()
  __pyx_t_6 = __pyx_f_7questdb_7_client__in_bounded_wait_callback(); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 11126, __pyx_L1_error)
  __pyx_v_in_callback = __pyx_t_6;
 11127:         # Wait outside `_state_cond`, and before closing starts: the
 11128:         # callback's thread may need the lock to release a pool use before
 11129:         # the callback can return, and giving up here leaves the handle as
 11130:         # it was.
+11131:         if not _oidc_wait_diagnostics_drained(
  __pyx_t_6 = __pyx_f_7questdb_7_client__oidc_wait_diagnostics_drained(__pyx_v_oidc_auth, __pyx_v_7questdb_7_client__OIDC_CLOSE_DIAGNOSTIC_WAIT_SECS); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 11131, __pyx_L1_error)
  __pyx_t_9 = (!__pyx_t_6);
  if (unlikely(__pyx_t_9)) {
/* … */
  }
 11132:                 oidc_auth, _OIDC_CLOSE_DIAGNOSTIC_WAIT_SECS):
+11133:             raise QuestDBError(
    __pyx_t_4 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11133, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
+11134:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11134, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11134, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_5 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_8);
      assert(__pyx_t_4);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
      __pyx_t_5 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_3, __pyx_mstate_global->__pyx_kp_u_QuestDB_close_gave_up_waiting_fo};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __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_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11133, __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(0, 11133, __pyx_L1_error)
 11135:                 'QuestDB.close() gave up waiting for a '
 11136:                 'persistence-warning callback of its OIDC provider to '
 11137:                 'return on another thread. If that callback is waiting '
 11138:                 'for this close, return from it first; otherwise retry '
 11139:                 'the close.')
 11140:         # A lease is returned only by the code holding it, and a lease
 11141:         # about to be closed looks exactly like one nobody will ever
 11142:         # touch again; a call runs until its work is done, and nothing
 11143:         # here can interrupt it. Whether either will finish is
 11144:         # something only the caller can know, so the caller sets the
 11145:         # limits: one deadline for leases and one for calls, either of
 11146:         # which may be absent. Each applies only while something of
 11147:         # its kind is outstanding, and neither count grows once the
 11148:         # handle is closing. Running out leaves the handle closing,
 11149:         # and a later close() resumes the wait.
+11150:         started = time.monotonic()
  __pyx_t_8 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11150, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11150, __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_8 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_8);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_8);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_8, 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_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11150, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_started = __pyx_t_1;
  __pyx_t_1 = 0;
 11151:         lease_deadline = (
+11152:             None if lease_limit is None else started + lease_limit)
  __pyx_t_9 = (__pyx_v_lease_limit == Py_None);
  if (__pyx_t_9) {
    __Pyx_INCREF(Py_None);
    __pyx_t_1 = Py_None;
  } else {
    __pyx_t_4 = PyNumber_Add(__pyx_v_started, __pyx_v_lease_limit); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11152, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = __pyx_t_4;
    __pyx_t_4 = 0;
  }
  __pyx_v_lease_deadline = __pyx_t_1;
  __pyx_t_1 = 0;
 11153:         call_deadline = (
+11154:             None if call_limit is None else started + call_limit)
  __pyx_t_9 = (__pyx_v_call_limit == Py_None);
  if (__pyx_t_9) {
    __Pyx_INCREF(Py_None);
    __pyx_t_1 = Py_None;
  } else {
    __pyx_t_4 = PyNumber_Add(__pyx_v_started, __pyx_v_call_limit); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11154, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = __pyx_t_4;
    __pyx_t_4 = 0;
  }
  __pyx_v_call_deadline = __pyx_t_1;
  __pyx_t_1 = 0;
+11155:         if in_callback:
  if (__pyx_v_in_callback) {
/* … */
  }
+11156:             callback_deadline = started + _OIDC_CLOSE_DIAGNOSTIC_WAIT_SECS
    __pyx_t_1 = PyFloat_FromDouble(__pyx_v_7questdb_7_client__OIDC_CLOSE_DIAGNOSTIC_WAIT_SECS); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11156, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = PyNumber_Add(__pyx_v_started, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11156, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_callback_deadline, __pyx_t_4);
    __pyx_t_4 = 0;
 11157:         # The lock is taken and released through `acquire` and `release`,
 11158:         # the RLock's own C methods, here and at every other place
 11159:         # `close()` and `__exit__` hold it. `Condition.__enter__` and
 11160:         # `__exit__` are written in Python, and a pending Ctrl-C is
 11161:         # raised at the start of the first Python function called after
 11162:         # it arrives. Raised on entry to `Condition.__exit__`, before
 11163:         # that releases the lock, it would leave this thread holding it,
 11164:         # and every other thread using the handle would block on it for
 11165:         # good. A blocked `acquire` can itself be interrupted; it then
 11166:         # raises without taking the lock, before the `try` it guards.
+11167:         self._state_cond.acquire()
  __pyx_t_1 = __pyx_v_self->_state_cond;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL};
    __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_acquire, __pyx_callargs+__pyx_t_5, (1-__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(0, 11167, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+11168:         try:
  /*try:*/ {
 11169:             # A close from inside one of this handle's own calls --
 11170:             # `dataframe()` reading `attrs`, a cell conversion, an
 11171:             # Arrow producer, a lease's own `row()` -- would wait on
 11172:             # the very frame that has to finish first, sit out the
 11173:             # whole bound, and leave the handle closing under its own
 11174:             # caller. Refused before `_closing` is published, so a
 11175:             # refused close changes nothing for any other thread.
+11176:             if self._scoped_call_depth() != 0:
    __pyx_t_10 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->_scoped_call_depth(__pyx_v_self); if (unlikely(__pyx_t_10 == ((uintptr_t)((uintptr_t)-1L)) && PyErr_Occurred())) __PYX_ERR(0, 11176, __pyx_L8_error)
    __pyx_t_9 = (__pyx_t_10 != 0);
    if (__pyx_t_9) {
/* … */
    }
+11177:                 msg = ("close() can't be called from inside a call on "
      __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_close_can_t_be_called_from_insid);
      __pyx_v_msg = __pyx_mstate_global->__pyx_kp_u_close_can_t_be_called_from_insid;
 11178:                        'this QuestDB handle. It would wait for that '
 11179:                        'call to finish, which cannot happen while the '
 11180:                        'call is waiting for close(). Close it after '
 11181:                        'the call returns.')
 11182:                 # Only greenlets let another caller be suspended inside
 11183:                 # a call on this OS thread, so only a process that has
 11184:                 # loaded them is told about that case. gevent and
 11185:                 # eventlet both run on `greenlet`.
+11186:                 if 'greenlet' in sys.modules:
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_sys); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11186, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_modules); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11186, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_9 = (__Pyx_PySequence_ContainsTF(__pyx_mstate_global->__pyx_n_u_greenlet, __pyx_t_1, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 11186, __pyx_L8_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (__pyx_t_9) {
/* … */
      }
+11187:                     msg += (' With greenlets, every greenlet on an OS '
        __pyx_t_1 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_v_msg, __pyx_mstate_global->__pyx_kp_u_With_greenlets_every_greenlet_o); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11187, __pyx_L8_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF_SET(__pyx_v_msg, ((PyObject*)__pyx_t_1));
        __pyx_t_1 = 0;
 11188:                             'thread counts as the same caller, so this '
 11189:                             'is also refused while another greenlet on '
 11190:                             'this thread is suspended inside a call on '
 11191:                             'the handle or on one of its leases.')
+11192:                 raise QuestDBError(QuestDBErrorCode.InvalidApiCall, msg)
      __pyx_t_4 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11192, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11192, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11192, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_5 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_8))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_8);
        assert(__pyx_t_4);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
        __pyx_t_5 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_2, __pyx_v_msg};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __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_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11192, __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(0, 11192, __pyx_L8_error)
 11193:             # A caller dispatching for this handle can wait on
 11194:             # nothing: while its callback frame is out, this thread
 11195:             # delivers no events and the native layer holds a borrow
 11196:             # on it, so anything the drain needs from this thread can
 11197:             # never happen. Refused before `_closing` is published,
 11198:             # like the depth refusal above, so a refused close changes
 11199:             # nothing for any other thread. With nothing outstanding
 11200:             # the close proceeds: there is no wait to refuse.
+11201:             if (self._db != NULL
    __pyx_t_6 = (__pyx_v_self->_db != NULL);
    if (__pyx_t_6) {
    } else {
      __pyx_t_9 = __pyx_t_6;
      goto __pyx_L13_bool_binop_done;
    }
/* … */
    if (unlikely(__pyx_t_9)) {
/* … */
    }
+11202:                     and self._lease_uses + self._call_uses != 0
    __pyx_t_6 = ((__pyx_v_self->_lease_uses + __pyx_v_self->_call_uses) != 0);
    if (__pyx_t_6) {
    } else {
      __pyx_t_9 = __pyx_t_6;
      goto __pyx_L13_bool_binop_done;
    }
+11203:                     and _dispatching_for(self._thread_owner_token)):
    __pyx_t_1 = __pyx_v_self->_thread_owner_token;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_6 = __pyx_f_7questdb_7_client__dispatching_for(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_9 = __pyx_t_6;
    __pyx_L13_bool_binop_done:;
+11204:                 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(0, 11204, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_2);
+11205:                     QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11205, __pyx_L8_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(0, 11205, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_5 = 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_5 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_3, __pyx_mstate_global->__pyx_kp_u_close_can_t_wait_for_outstanding};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11204, __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(0, 11204, __pyx_L8_error)
 11206:                     "close() can't wait for outstanding leases or "
 11207:                     "calls from inside this handle's own "
 11208:                     'error_handler or connection_listener callback: '
 11209:                     'while the callback runs, this thread delivers '
 11210:                     'nothing, including whatever the wait needs. '
 11211:                     'Call close() from another thread.')
 11212:             # One-way from here: `_closing` is never cleared, so every
 11213:             # refusal it causes stays true, and the use counts only
 11214:             # move down -- `_begin_db_use` takes no new work once it
 11215:             # is set.
+11216:             already_closing = self._closing
    __pyx_t_9 = __pyx_v_self->_closing;
    __pyx_v_already_closing = __pyx_t_9;
+11217:             self._closing = True
    __pyx_v_self->_closing = 1;
 11218:             # A number of seconds is a budget for the whole close: the
 11219:             # close a `with` block makes on its way out waits only for
 11220:             # what is left of it (see `__exit__`). Only a number sets
 11221:             # `call_deadline`, so the default and `None` clear the
 11222:             # budget, and the way out closes with the default limits.
+11223:             self._close_deadline = call_deadline
    __Pyx_INCREF(__pyx_v_call_deadline);
    __Pyx_GIVEREF(__pyx_v_call_deadline);
    __Pyx_GOTREF(__pyx_v_self->_close_deadline);
    __Pyx_DECREF(__pyx_v_self->_close_deadline);
    __pyx_v_self->_close_deadline = __pyx_v_call_deadline;
  }
 11224:         finally:
+11225:             self._state_cond.release()
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_2 = __pyx_v_self->_state_cond;
      __Pyx_INCREF(__pyx_t_2);
      __pyx_t_5 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
        __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11225, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L9;
    }
    __pyx_L8_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
      __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;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
      if ( unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
      __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_XGOTREF(__pyx_t_19);
      __pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
      {
        __pyx_t_2 = __pyx_v_self->_state_cond;
        __Pyx_INCREF(__pyx_t_2);
        __pyx_t_5 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
          __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11225, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_1);
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __Pyx_XGIVEREF(__pyx_t_17);
      __Pyx_XGIVEREF(__pyx_t_18);
      __Pyx_XGIVEREF(__pyx_t_19);
      __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
      __Pyx_XGIVEREF(__pyx_t_14);
      __Pyx_XGIVEREF(__pyx_t_15);
      __Pyx_XGIVEREF(__pyx_t_16);
      __Pyx_ErrRestore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
      __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
      __pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
      goto __pyx_L1_error;
      __pyx_L17_error:;
      __Pyx_XGIVEREF(__pyx_t_17);
      __Pyx_XGIVEREF(__pyx_t_18);
      __Pyx_XGIVEREF(__pyx_t_19);
      __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
      __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L9:;
  }
 11226:         # Each wait below holds the lock only to read state and to
 11227:         # wait on it, and emits its progress notice with the lock
 11228:         # released. A notice runs the caller's logging handlers, which
 11229:         # are free to block or to reach this very handle from another
 11230:         # thread -- a handler that ingests its log lines into QuestDB
 11231:         # does both. While one runs, every lease return, call exit and
 11232:         # refusal still goes through the lock, so the drain being
 11233:         # reported on keeps moving.
+11234:         next_notice = started + 5.0
  __pyx_t_1 = __Pyx_PyFloat_AddObjC(__pyx_v_started, __pyx_mstate_global->__pyx_float_5_0, 5.0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11234, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_next_notice = __pyx_t_1;
  __pyx_t_1 = 0;
+11235:         while True:
  while (1) {
+11236:             notice = False
    __pyx_v_notice = 0;
 11237:             # Held through `acquire` and `release`, as above. Here it
 11238:             # also keeps Python code out of the step from claiming the
 11239:             # pointer to the native teardown: after the claim, the next
 11240:             # code to run is the `release` below and then the `try`
 11241:             # around `questdb_db_close`, so a Ctrl-C arriving in between
 11242:             # stays pending until the teardown's own `finally`, which
 11243:             # records the close first. A second Ctrl-C landing inside
 11244:             # `Condition.wait`'s own re-acquire of the lock can still
 11245:             # leave the lock in a bad state; nothing has been claimed
 11246:             # while this thread waits, so no teardown is skipped.
+11247:             self._state_cond.acquire()
    __pyx_t_2 = __pyx_v_self->_state_cond;
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_5 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_acquire, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11247, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+11248:             try:
    /*try:*/ {
+11249:                 if self._db == NULL:
      __pyx_t_9 = (__pyx_v_self->_db == NULL);
      if (__pyx_t_9) {
/* … */
      }
+11250:                     break
        goto __pyx_L21_break;
+11251:                 if self._lease_uses + self._call_uses == 0:
      __pyx_t_9 = ((__pyx_v_self->_lease_uses + __pyx_v_self->_call_uses) == 0);
      if (__pyx_t_9) {
/* … */
      }
 11252:                     # Nothing is using the handle. The counts are read
 11253:                     # and the pointer claimed under one hold of the
 11254:                     # lock, which picks exactly one close() to run the
 11255:                     # native teardown, and the pointer stays published
 11256:                     # up to this very point -- so every borrower's
 11257:                     # copy of it was valid for as long as the borrower
 11258:                     # held a use.
+11259:                     db = self._db
        __pyx_t_20 = __pyx_v_self->_db;
        __pyx_v_db = __pyx_t_20;
+11260:                     self._db = NULL
        __pyx_v_self->_db = NULL;
+11261:                     self._close_running = True
        __pyx_v_self->_close_running = 1;
+11262:                     break
        goto __pyx_L21_break;
+11263:                 deadline = None
      __Pyx_INCREF(Py_None);
      __Pyx_XDECREF_SET(__pyx_v_deadline, Py_None);
+11264:                 if self._lease_uses != 0 and lease_deadline is not None:
      __pyx_t_6 = (__pyx_v_self->_lease_uses != 0);
      if (__pyx_t_6) {
      } else {
        __pyx_t_9 = __pyx_t_6;
        goto __pyx_L28_bool_binop_done;
      }
      __pyx_t_6 = (__pyx_v_lease_deadline != Py_None);
      __pyx_t_9 = __pyx_t_6;
      __pyx_L28_bool_binop_done:;
      if (__pyx_t_9) {
/* … */
      }
+11265:                     deadline = lease_deadline
        __Pyx_INCREF(__pyx_v_lease_deadline);
        __Pyx_DECREF_SET(__pyx_v_deadline, __pyx_v_lease_deadline);
+11266:                 if (self._call_uses != 0 and call_deadline is not None
      __pyx_t_6 = (__pyx_v_self->_call_uses != 0);
      if (__pyx_t_6) {
      } else {
        __pyx_t_9 = __pyx_t_6;
        goto __pyx_L31_bool_binop_done;
      }
/* … */
      __pyx_t_6 = (__pyx_v_call_deadline != Py_None);
      if (__pyx_t_6) {
      } else {
        __pyx_t_9 = __pyx_t_6;
        goto __pyx_L31_bool_binop_done;
      }
/* … */
      if (__pyx_t_9) {
/* … */
      }
+11267:                         and (deadline is None or call_deadline < deadline)):
      __pyx_t_6 = (__pyx_v_deadline == Py_None);
      if (!__pyx_t_6) {
      } else {
        __pyx_t_9 = __pyx_t_6;
        goto __pyx_L31_bool_binop_done;
      }
      __pyx_t_1 = PyObject_RichCompare(__pyx_v_call_deadline, __pyx_v_deadline, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11267, __pyx_L23_error)
      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 11267, __pyx_L23_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_9 = __pyx_t_6;
      __pyx_L31_bool_binop_done:;
+11268:                     deadline = call_deadline
        __Pyx_INCREF(__pyx_v_call_deadline);
        __Pyx_DECREF_SET(__pyx_v_deadline, __pyx_v_call_deadline);
+11269:                 now = time.monotonic()
      __pyx_t_2 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11269, __pyx_L23_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11269, __pyx_L23_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_5 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(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_5 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
        __pyx_t_1 = __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_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11269, __pyx_L23_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_XDECREF_SET(__pyx_v_now, __pyx_t_1);
      __pyx_t_1 = 0;
+11270:                 if deadline is not None and now >= deadline:
      __pyx_t_6 = (__pyx_v_deadline != Py_None);
      if (__pyx_t_6) {
      } else {
        __pyx_t_9 = __pyx_t_6;
        goto __pyx_L36_bool_binop_done;
      }
      __pyx_t_1 = PyObject_RichCompare(__pyx_v_now, __pyx_v_deadline, Py_GE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11270, __pyx_L23_error)
      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 11270, __pyx_L23_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_9 = __pyx_t_6;
      __pyx_L36_bool_binop_done:;
      if (unlikely(__pyx_t_9)) {
/* … */
      }
+11271:                     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(0, 11271, __pyx_L23_error)
        __Pyx_GOTREF(__pyx_t_2);
+11272:                         QuestDBErrorCode.InvalidApiCall,
        __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11272, __pyx_L23_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11272, __pyx_L23_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+11273:                         _close_gave_up_message(
        __pyx_t_3 = __pyx_f_7questdb_7_client__close_gave_up_message(__pyx_t_7, __pyx_v_self->_lease_uses, __pyx_v_self->_call_uses); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11273, __pyx_L23_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_4, __pyx_t_3};
          __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 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;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11271, __pyx_L23_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(0, 11271, __pyx_L23_error)
+11274:                             deadline - started,
        __pyx_t_3 = PyNumber_Subtract(__pyx_v_deadline, __pyx_v_started); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11274, __pyx_L23_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_7 = __Pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 11274, __pyx_L23_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 11275:                             self._lease_uses,
 11276:                             self._call_uses))
+11277:                 if callback_deadline is not None:
      __pyx_t_9 = (__pyx_v_callback_deadline != Py_None);
      if (__pyx_t_9) {
/* … */
      }
+11278:                     if now >= callback_deadline:
        __pyx_t_1 = PyObject_RichCompare(__pyx_v_now, __pyx_v_callback_deadline, Py_GE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11278, __pyx_L23_error)
        __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 11278, __pyx_L23_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(__pyx_t_9)) {
/* … */
        }
+11279:                         raise _callback_wait_refused(
          __pyx_t_2 = __pyx_f_7questdb_7_client__callback_wait_refused(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11279, __pyx_L23_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_Raise(__pyx_t_2, 0, 0, 0);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __PYX_ERR(0, 11279, __pyx_L23_error)
+11280:                             _close_callback_gave_up_message(
          __pyx_t_1 = __pyx_f_7questdb_7_client__close_callback_gave_up_message(__pyx_v_already_closing, __pyx_v_self->_lease_uses, __pyx_v_self->_call_uses); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11280, __pyx_L23_error)
          __Pyx_GOTREF(__pyx_t_1);
 11281:                                 already_closing,
 11282:                                 self._lease_uses,
 11283:                                 self._call_uses))
+11284:                     if deadline is None or callback_deadline < deadline:
        __pyx_t_6 = (__pyx_v_deadline == Py_None);
        if (!__pyx_t_6) {
        } else {
          __pyx_t_9 = __pyx_t_6;
          goto __pyx_L41_bool_binop_done;
        }
        __pyx_t_2 = PyObject_RichCompare(__pyx_v_callback_deadline, __pyx_v_deadline, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11284, __pyx_L23_error)
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 11284, __pyx_L23_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_9 = __pyx_t_6;
        __pyx_L41_bool_binop_done:;
        if (__pyx_t_9) {
/* … */
        }
+11285:                         deadline = callback_deadline
          __Pyx_INCREF(__pyx_v_callback_deadline);
          __Pyx_DECREF_SET(__pyx_v_deadline, __pyx_v_callback_deadline);
 11286:                 # Woken at whichever is sooner, the next notice or the
 11287:                 # limit, so a limit holds whatever it is set to rather
 11288:                 # than only at the notice cadence. A wait that runs out
 11289:                 # with work still outstanding is reported either way.
+11290:                 wait_s = next_notice - now
      __pyx_t_2 = PyNumber_Subtract(__pyx_v_next_notice, __pyx_v_now); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11290, __pyx_L23_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_XDECREF_SET(__pyx_v_wait_s, __pyx_t_2);
      __pyx_t_2 = 0;
+11291:                 if deadline is not None and deadline - now < wait_s:
      __pyx_t_6 = (__pyx_v_deadline != Py_None);
      if (__pyx_t_6) {
      } else {
        __pyx_t_9 = __pyx_t_6;
        goto __pyx_L44_bool_binop_done;
      }
      __pyx_t_2 = PyNumber_Subtract(__pyx_v_deadline, __pyx_v_now); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11291, __pyx_L23_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_v_wait_s, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11291, __pyx_L23_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 11291, __pyx_L23_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_9 = __pyx_t_6;
      __pyx_L44_bool_binop_done:;
      if (__pyx_t_9) {
/* … */
      }
+11292:                     wait_s = deadline - now
        __pyx_t_1 = PyNumber_Subtract(__pyx_v_deadline, __pyx_v_now); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11292, __pyx_L23_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF_SET(__pyx_v_wait_s, __pyx_t_1);
        __pyx_t_1 = 0;
+11293:                 if (not self._state_cond.wait(timeout=max(wait_s, 0.0))
      __pyx_t_2 = __pyx_v_self->_state_cond;
      __Pyx_INCREF(__pyx_t_2);
      __pyx_t_7 = 0.0;
      __Pyx_INCREF(__pyx_v_wait_s);
      __pyx_t_3 = __pyx_v_wait_s;
      __pyx_t_8 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11293, __pyx_L23_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_21 = PyObject_RichCompare(__pyx_t_8, __pyx_t_3, Py_GT); __Pyx_XGOTREF(__pyx_t_21); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 11293, __pyx_L23_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_21); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 11293, __pyx_L23_error)
      __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
      if (__pyx_t_6) {
        __pyx_t_21 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 11293, __pyx_L23_error)
        __Pyx_GOTREF(__pyx_t_21);
        __pyx_t_4 = __pyx_t_21;
        __pyx_t_21 = 0;
      } else {
        __Pyx_INCREF(__pyx_t_3);
        __pyx_t_4 = __pyx_t_3;
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_5 = 0;
      {
        PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_2, NULL};
        __pyx_t_3 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11293, __pyx_L23_error)
        __Pyx_GOTREF(__pyx_t_3);
        if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_timeout, __pyx_t_4, __pyx_t_3, __pyx_callargs+1, 0) < (0)) __PYX_ERR(0, 11293, __pyx_L23_error)
        __pyx_t_1 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_wait, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_3);
        __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(0, 11293, __pyx_L23_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 11293, __pyx_L23_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_22 = (!__pyx_t_6);
      if (__pyx_t_22) {
      } else {
        __pyx_t_9 = __pyx_t_22;
        goto __pyx_L47_bool_binop_done;
      }
/* … */
      if (__pyx_t_9) {
/* … */
      }
    }
 11294:                         and (self._lease_uses
+11295:                              + self._call_uses) != 0):
      __pyx_t_22 = ((__pyx_v_self->_lease_uses + __pyx_v_self->_call_uses) != 0);
      __pyx_t_9 = __pyx_t_22;
      __pyx_L47_bool_binop_done:;
+11296:                     notice = True
        __pyx_v_notice = 1;
+11297:                     notice_leases = self._lease_uses
        __pyx_t_5 = __pyx_v_self->_lease_uses;
        __pyx_v_notice_leases = __pyx_t_5;
+11298:                     notice_calls = self._call_uses
        __pyx_t_5 = __pyx_v_self->_call_uses;
        __pyx_v_notice_calls = __pyx_t_5;
 11299:                     # Every five seconds for the first minute, then
 11300:                     # once a minute: a wait for a long load would
 11301:                     # otherwise log a line every five seconds for as
 11302:                     # long as the load runs.
+11303:                     now = time.monotonic()
        __pyx_t_3 = NULL;
        __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11303, __pyx_L23_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11303, __pyx_L23_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_5 = 1;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_2))) {
          __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
          assert(__pyx_t_3);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
          __pyx_t_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
          __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __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_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11303, __pyx_L23_error)
          __Pyx_GOTREF(__pyx_t_1);
        }
        __Pyx_DECREF_SET(__pyx_v_now, __pyx_t_1);
        __pyx_t_1 = 0;
+11304:                     next_notice = now + (
        __pyx_t_3 = PyNumber_Add(__pyx_v_now, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11304, __pyx_L23_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF_SET(__pyx_v_next_notice, __pyx_t_3);
        __pyx_t_3 = 0;
+11305:                         5.0 if now - started < 60.0 else 60.0)
        __pyx_t_2 = PyNumber_Subtract(__pyx_v_now, __pyx_v_started); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11305, __pyx_L23_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_mstate_global->__pyx_float_60_0, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11305, __pyx_L23_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 11305, __pyx_L23_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (__pyx_t_9) {
          __Pyx_INCREF(__pyx_mstate_global->__pyx_float_5_0);
          __pyx_t_1 = __pyx_mstate_global->__pyx_float_5_0;
        } else {
          __Pyx_INCREF(__pyx_mstate_global->__pyx_float_60_0);
          __pyx_t_1 = __pyx_mstate_global->__pyx_float_60_0;
        }
 11306:             finally:
+11307:                 self._state_cond.release()
    /*finally:*/ {
      /*normal exit:*/{
        __pyx_t_1 = __pyx_v_self->_state_cond;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_5 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11307, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        goto __pyx_L24;
      }
      __pyx_L23_error:;
      /*exception exit:*/{
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
         __Pyx_ExceptionSwap(&__pyx_t_16, &__pyx_t_15, &__pyx_t_14);
        if ( unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17);
        __Pyx_XGOTREF(__pyx_t_19);
        __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_t_12 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_23 = __pyx_filename;
        {
          __pyx_t_1 = __pyx_v_self->_state_cond;
          __Pyx_INCREF(__pyx_t_1);
          __pyx_t_5 = 0;
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL};
            __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
            if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11307, __pyx_L52_error)
            __Pyx_GOTREF(__pyx_t_3);
          }
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        }
        __Pyx_XGIVEREF(__pyx_t_16);
        __Pyx_XGIVEREF(__pyx_t_15);
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_15, __pyx_t_14);
        __Pyx_XGIVEREF(__pyx_t_19);
        __Pyx_XGIVEREF(__pyx_t_18);
        __Pyx_XGIVEREF(__pyx_t_17);
        __Pyx_ErrRestore(__pyx_t_19, __pyx_t_18, __pyx_t_17);
        __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0;
        __pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_23;
        goto __pyx_L1_error;
        __pyx_L52_error:;
        __Pyx_XGIVEREF(__pyx_t_16);
        __Pyx_XGIVEREF(__pyx_t_15);
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_15, __pyx_t_14);
        __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
        __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
        __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
        __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0;
        goto __pyx_L1_error;
      }
      __pyx_L21_break: {
        __pyx_t_1 = __pyx_v_self->_state_cond;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_5 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11307, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        goto __pyx_L19_break;
      }
      __pyx_L24:;
    }
+11308:             if notice:
    if (__pyx_v_notice) {
/* … */
    }
  }
  __pyx_L19_break:;
 11309:                 # Logged rather than warned, like every other
 11310:                 # notice this client emits from a place the
 11311:                 # caller did not ask for one: a warning turns
 11312:                 # into an exception under `-W error`, which
 11313:                 # would end the wait at the first notice and
 11314:                 # hand back the wrong exception type.
+11315:                 logging.getLogger('questdb').warning(
      __pyx_t_4 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 11315, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_21);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_21, __pyx_mstate_global->__pyx_n_u_getLogger); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11315, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
      __pyx_t_5 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_8))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_8);
        assert(__pyx_t_4);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
        __pyx_t_5 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_n_u_questdb};
        __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __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_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11315, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __pyx_t_1 = __pyx_t_2;
      __Pyx_INCREF(__pyx_t_1);
 11316:                     'QuestDB.close() is waiting for %d '
 11317:                     'outstanding lease(s) and %d in-progress '
 11318:                     'call(s) to finish.',
+11319:                     notice_leases,
      __pyx_t_8 = __Pyx_PyLong_FromSize_t(__pyx_v_notice_leases); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11319, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
+11320:                     notice_calls)
      __pyx_t_4 = __Pyx_PyLong_FromSize_t(__pyx_v_notice_calls); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11320, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = 0;
      {
        PyObject *__pyx_callargs[4] = {__pyx_t_1, __pyx_mstate_global->__pyx_kp_u_QuestDB_close_is_waiting_for_d_o, __pyx_t_8, __pyx_t_4};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_warning, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11315, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+11321:         if db == NULL:
  __pyx_t_9 = (__pyx_v_db == NULL);
  if (__pyx_t_9) {
/* … */
  }
 11322:             # Another close() claimed the pointer, or the handle
 11323:             # never opened. A caller dispatching for this handle
 11324:             # must not wait for the teardown to finish: the
 11325:             # in-flight closer joins this very thread. Returning
 11326:             # early is safe because closing cannot be undone --
 11327:             # the handle only moves toward closed.
+11328:             if _dispatching_for(self._thread_owner_token):
    __pyx_t_3 = __pyx_v_self->_thread_owner_token;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_9 = __pyx_f_7questdb_7_client__dispatching_for(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_9) {
/* … */
    }
+11329:                 return
      __Pyx_XDECREF(__pyx_r);
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      goto __pyx_L0;
 11330:             # A close() of this handle from a finalizer that a
 11331:             # garbage-collection pass runs on this thread while this
 11332:             # thread holds the pointer (after taking it, before
 11333:             # publishing the close) waits below for its own close
 11334:             # until its limit runs out, then raises. This is
 11335:             # deliberately left alone. It needs an unreachable object
 11336:             # whose finalizer closes this very handle, collected in a
 11337:             # window of a few Python operations, and it loses nothing.
 11338:             # The ways out are poor: returning early can report
 11339:             # success before the teardown has run, and a refusal needs
 11340:             # the tearing-down thread tracked for a case that
 11341:             # practically never happens.
 11342:             #
 11343:             # A number of seconds is one budget for the whole call, so
 11344:             # this wait gets only what the drain left of it and ends
 11345:             # at `call_deadline`. The default and `None` set no
 11346:             # budget: this wait gets a bound of its own, starting
 11347:             # when it does -- a minute by default, none for None.
+11348:             if call_deadline is not None:
    __pyx_t_9 = (__pyx_v_call_deadline != Py_None);
    if (__pyx_t_9) {
/* … */
      goto __pyx_L56;
    }
+11349:                 deadline = call_deadline
      __Pyx_INCREF(__pyx_v_call_deadline);
      __Pyx_XDECREF_SET(__pyx_v_deadline, __pyx_v_call_deadline);
 11350:             else:
+11351:                 deadline = (None if lease_limit is None
    /*else*/ {
      __pyx_t_9 = (__pyx_v_lease_limit == Py_None);
      if (__pyx_t_9) {
        __Pyx_INCREF(Py_None);
        __pyx_t_3 = Py_None;
      } else {
+11352:                             else time.monotonic() + lease_limit)
        __pyx_t_4 = NULL;
        __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11352, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11352, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11352, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_1 = PyNumber_Add(__pyx_t_2, __pyx_v_lease_limit); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11352, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_3 = __pyx_t_1;
        __pyx_t_1 = 0;
      }
      __Pyx_XDECREF_SET(__pyx_v_deadline, __pyx_t_3);
      __pyx_t_3 = 0;
    }
    __pyx_L56:;
+11353:             if callback_deadline is not None and (
    __pyx_t_22 = (__pyx_v_callback_deadline != Py_None);
    if (__pyx_t_22) {
    } else {
      __pyx_t_9 = __pyx_t_22;
      goto __pyx_L58_bool_binop_done;
    }
/* … */
    if (__pyx_t_9) {
/* … */
    }
+11354:                     deadline is None or callback_deadline < deadline):
    __pyx_t_22 = (__pyx_v_deadline == Py_None);
    if (!__pyx_t_22) {
    } else {
      __pyx_t_9 = __pyx_t_22;
      goto __pyx_L58_bool_binop_done;
    }
    __pyx_t_3 = PyObject_RichCompare(__pyx_v_callback_deadline, __pyx_v_deadline, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11354, __pyx_L1_error)
    __pyx_t_22 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_22 < 0))) __PYX_ERR(0, 11354, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_9 = __pyx_t_22;
    __pyx_L58_bool_binop_done:;
+11355:                 deadline = callback_deadline
      __Pyx_INCREF(__pyx_v_callback_deadline);
      __Pyx_DECREF_SET(__pyx_v_deadline, __pyx_v_callback_deadline);
+11356:                 callback_bound = True
      __pyx_v_callback_bound = 1;
+11357:             while True:
    while (1) {
+11358:                 notice = False
      __pyx_v_notice = 0;
 11359:                 # Held through `acquire` and `release`, as above.
+11360:                 self._state_cond.acquire()
      __pyx_t_1 = __pyx_v_self->_state_cond;
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_5 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_acquire, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11360, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+11361:                 try:
      /*try:*/ {
+11362:                     if not self._close_running:
        __pyx_t_9 = (!__pyx_v_self->_close_running);
        if (__pyx_t_9) {
/* … */
        }
 11363:                         # `_close_running` clearing says the close()
 11364:                         # that claimed the pointer has finished;
 11365:                         # `self._db` says what it did. After a
 11366:                         # teardown the pointer stays NULL for good,
 11367:                         # so a NULL pointer here is a close that ran.
 11368:                         # A give-up hands the pointer back for a
 11369:                         # later close() to claim, and returning
 11370:                         # normally then would report a close that
 11371:                         # did not take place.
+11372:                         if self._db == NULL:
          __pyx_t_9 = (__pyx_v_self->_db == NULL);
          if (__pyx_t_9) {
/* … */
          }
+11373:                             return
            __Pyx_XDECREF(__pyx_r);
            __pyx_r = Py_None; __Pyx_INCREF(Py_None);
            goto __pyx_L65_return;
+11374:                         raise QuestDBError(
          __pyx_t_1 = NULL;
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11374, __pyx_L66_error)
          __Pyx_GOTREF(__pyx_t_2);
+11375:                             QuestDBErrorCode.InvalidApiCall,
          __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11375, __pyx_L66_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11375, __pyx_L66_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_5 = 1;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(PyMethod_Check(__pyx_t_2))) {
            __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
            assert(__pyx_t_1);
            PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
            __Pyx_INCREF(__pyx_t_1);
            __Pyx_INCREF(__pyx__function);
            __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
            __pyx_t_5 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_8, __pyx_mstate_global->__pyx_kp_u_close_did_not_close_the_handle_t};
            __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __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;
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11374, __pyx_L66_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(0, 11374, __pyx_L66_error)
 11376:                             'close() did not close the handle: the '
 11377:                             'concurrent close() on another thread '
 11378:                             'that this call waited for could not '
 11379:                             'finish the teardown. The handle stays '
 11380:                             'closing; call close() again.')
+11381:                     wait_s = 5.0
        __Pyx_INCREF(__pyx_mstate_global->__pyx_float_5_0);
        __Pyx_XDECREF_SET(__pyx_v_wait_s, __pyx_mstate_global->__pyx_float_5_0);
+11382:                     if deadline is not None:
        __pyx_t_9 = (__pyx_v_deadline != Py_None);
        if (__pyx_t_9) {
/* … */
        }
+11383:                         remaining = deadline - time.monotonic()
          __pyx_t_2 = NULL;
          __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11383, __pyx_L66_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11383, __pyx_L66_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __pyx_t_5 = 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_5 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
            __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __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_1); __pyx_t_1 = 0;
            if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11383, __pyx_L66_error)
            __Pyx_GOTREF(__pyx_t_3);
          }
          __pyx_t_1 = PyNumber_Subtract(__pyx_v_deadline, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11383, __pyx_L66_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF_SET(__pyx_v_remaining, __pyx_t_1);
          __pyx_t_1 = 0;
+11384:                         if remaining <= 0.0:
          __pyx_t_1 = PyObject_RichCompare(__pyx_v_remaining, __pyx_mstate_global->__pyx_float_0_0, Py_LE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11384, __pyx_L66_error)
          __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 11384, __pyx_L66_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (__pyx_t_9) {
/* … */
          }
+11385:                             if callback_bound:
            if (unlikely(__pyx_v_callback_bound)) {
/* … */
            }
+11386:                                 raise _callback_wait_refused(
              __pyx_t_3 = __pyx_f_7questdb_7_client__callback_wait_refused(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11386, __pyx_L66_error)
              __Pyx_GOTREF(__pyx_t_3);
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_Raise(__pyx_t_3, 0, 0, 0);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              __PYX_ERR(0, 11386, __pyx_L66_error)
+11387:                                     _close_callback_gave_up_message(
              __pyx_t_1 = __pyx_f_7questdb_7_client__close_callback_gave_up_message(1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11387, __pyx_L66_error)
              __Pyx_GOTREF(__pyx_t_1);
 11388:                                         True, 0, 0))
+11389:                             raise QuestDBError(
            __pyx_t_1 = NULL;
            __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11389, __pyx_L66_error)
            __Pyx_GOTREF(__pyx_t_2);
+11390:                                 QuestDBErrorCode.InvalidApiCall,
            __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11390, __pyx_L66_error)
            __Pyx_GOTREF(__pyx_t_8);
            __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11390, __pyx_L66_error)
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+11391:                                 'close() stopped waiting after '
            __pyx_t_21 = __Pyx_PyUnicode_Join(__pyx_t_24, 3, 30 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8) + 132, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8));
            if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 11391, __pyx_L66_error)
            __Pyx_GOTREF(__pyx_t_21);
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            __pyx_t_5 = 1;
            #if CYTHON_UNPACK_METHODS
            if (unlikely(PyMethod_Check(__pyx_t_2))) {
              __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
              assert(__pyx_t_1);
              PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
              __Pyx_INCREF(__pyx_t_1);
              __Pyx_INCREF(__pyx__function);
              __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
              __pyx_t_5 = 0;
            }
            #endif
            {
              PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_4, __pyx_t_21};
              __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __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;
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
              __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
              if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11389, __pyx_L66_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(0, 11389, __pyx_L66_error)
+11392:                                 f'{lease_limit:g}s for a concurrent '
            __pyx_t_8 = __Pyx_PyObject_Format(__pyx_v_lease_limit, __pyx_mstate_global->__pyx_n_u_g); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11392, __pyx_L66_error)
            __Pyx_GOTREF(__pyx_t_8);
            __pyx_t_24[0] = __pyx_mstate_global->__pyx_kp_u_close_stopped_waiting_after;
            __pyx_t_24[1] = __pyx_t_8;
            __pyx_t_24[2] = __pyx_mstate_global->__pyx_kp_u_s_for_a_concurrent_close_on_anot;
 11393:                                 'close() on another thread to finish '
 11394:                                 'the teardown. The handle stays '
 11395:                                 'closing; call close() again to '
 11396:                                 'resume waiting.')
+11397:                         wait_s = min(5.0, remaining)
          __Pyx_INCREF(__pyx_v_remaining);
          __pyx_t_3 = __pyx_v_remaining;
          __pyx_t_7 = 5.0;
          __pyx_t_21 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 11397, __pyx_L66_error)
          __Pyx_GOTREF(__pyx_t_21);
          __pyx_t_4 = PyObject_RichCompare(__pyx_t_3, __pyx_t_21, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11397, __pyx_L66_error)
          __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
          __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 11397, __pyx_L66_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (__pyx_t_9) {
            __Pyx_INCREF(__pyx_t_3);
            __pyx_t_2 = __pyx_t_3;
          } else {
            __pyx_t_4 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11397, __pyx_L66_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_2 = __pyx_t_4;
            __pyx_t_4 = 0;
          }
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __pyx_t_3 = __pyx_t_2;
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF_SET(__pyx_v_wait_s, __pyx_t_3);
          __pyx_t_3 = 0;
+11398:                     if (not self._state_cond.wait(timeout=wait_s)
        __pyx_t_2 = __pyx_v_self->_state_cond;
        __Pyx_INCREF(__pyx_t_2);
        __pyx_t_5 = 0;
        {
          PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_2, NULL};
          __pyx_t_4 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11398, __pyx_L66_error)
          __Pyx_GOTREF(__pyx_t_4);
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_timeout, __pyx_v_wait_s, __pyx_t_4, __pyx_callargs+1, 0) < (0)) __PYX_ERR(0, 11398, __pyx_L66_error)
          __pyx_t_3 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_wait, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_4);
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11398, __pyx_L66_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        __pyx_t_22 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_22 < 0))) __PYX_ERR(0, 11398, __pyx_L66_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_6 = (!__pyx_t_22);
        if (__pyx_t_6) {
        } else {
          __pyx_t_9 = __pyx_t_6;
          goto __pyx_L74_bool_binop_done;
        }
/* … */
        if (__pyx_t_9) {
/* … */
        }
      }
+11399:                             and self._close_running):
        __pyx_t_9 = __pyx_v_self->_close_running;
        __pyx_L74_bool_binop_done:;
+11400:                         notice = True
          __pyx_v_notice = 1;
 11401:                 finally:
+11402:                     self._state_cond.release()
      /*finally:*/ {
        /*normal exit:*/{
          __pyx_t_4 = __pyx_v_self->_state_cond;
          __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_release, __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(0, 11402, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_3);
          }
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          goto __pyx_L67;
        }
        __pyx_L66_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
           __Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
          if ( unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
          __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_XGOTREF(__pyx_t_19);
          __pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_25 = __pyx_filename;
          {
            __pyx_t_4 = __pyx_v_self->_state_cond;
            __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_release, __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(0, 11402, __pyx_L79_error)
              __Pyx_GOTREF(__pyx_t_3);
            }
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          }
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
          __Pyx_XGIVEREF(__pyx_t_14);
          __Pyx_XGIVEREF(__pyx_t_15);
          __Pyx_XGIVEREF(__pyx_t_16);
          __Pyx_ErrRestore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
          __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
          __pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_25;
          goto __pyx_L1_error;
          __pyx_L79_error:;
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
          goto __pyx_L1_error;
        }
        __pyx_L65_return: {
          __pyx_t_19 = __pyx_r;
          __pyx_r = 0;
          __pyx_t_4 = __pyx_v_self->_state_cond;
          __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_release, __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(0, 11402, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_3);
          }
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __pyx_r = __pyx_t_19;
          __pyx_t_19 = 0;
          goto __pyx_L0;
        }
        __pyx_L67:;
      }
+11403:                 if notice:
      if (__pyx_v_notice) {
/* … */
      }
    }
+11404:                     logging.getLogger('questdb').warning(
        __pyx_t_21 = NULL;
        __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11404, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_getLogger); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11404, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_5 = 1;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_8))) {
          __pyx_t_21 = PyMethod_GET_SELF(__pyx_t_8);
          assert(__pyx_t_21);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
          __Pyx_INCREF(__pyx_t_21);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
          __pyx_t_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_21, __pyx_mstate_global->__pyx_n_u_questdb};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11404, __pyx_L1_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_QuestDB_close_is_still_waiting_f};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_warning, __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_3)) __PYX_ERR(0, 11404, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 11405:                         'QuestDB.close() is still waiting for '
 11406:                         'a concurrent close() on another '
 11407:                         'thread to finish.')
+11408:         try:
  /*try:*/ {
+11409:             _ensure_doesnt_have_gil(&gs)
    (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
 11410:             # `questdb_db_close` drains both the writer and reader free
 11411:             # lists in one shot (see `db.rs::DbInner::Drop`).
+11412:             questdb_db_close(db)
    questdb_db_close(__pyx_v_db);
+11413:             closed = True
    __pyx_v_closed = 1;
  }
 11414:         finally:
+11415:             _ensure_has_gil(&gs)
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
 11416:             # The close is published as finished before the callbacks
 11417:             # are released. Releasing them can run their finalizers
 11418:             # right here, on this thread: a finalizer that calls
 11419:             # close() on this handle, or that waits for a lock held by
 11420:             # a thread waiting for this close, finds the close already
 11421:             # finished instead of waiting for it. Nothing needs the
 11422:             # callbacks by now: `questdb_db_close` has joined the
 11423:             # dispatchers, so no callback can run any more.
 11424:             #
 11425:             # No Python code runs from the claim of the pointer to the
 11426:             # moment the close is published. A Ctrl-C during the native
 11427:             # close, which runs without the GIL, or between the claim
 11428:             # and it, is held as a pending signal and raised at the
 11429:             # first Python function called after it. `with
 11430:             # self._state_cond:` would be that call --
 11431:             # `Condition.__enter__` is written in Python -- and every
 11432:             # later close() would then wait for this one for good, with
 11433:             # the callbacks still pinned. So the lock is taken through
 11434:             # `acquire`, which is the RLock's own C method, and the
 11435:             # state is written by plain attribute assignment. A blocked
 11436:             # acquire can still be interrupted by a further signal; it
 11437:             # is retried, and the first interrupt is raised once
 11438:             # everything here is done.
+11439:             while not locked:
      while (1) {
        __pyx_t_9 = (!__pyx_v_locked);
        if (!__pyx_t_9) break;
+11440:                 try:
        {
          /*try:*/ {
/* … */
          }
          __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
          __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
          goto __pyx_L93_try_end;
          __pyx_L86_error:;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
          __pyx_L88_except_error:;
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_ExceptionReset(__pyx_t_19, __pyx_t_18, __pyx_t_17);
          goto __pyx_L1_error;
          __pyx_L87_exception_handled:;
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_ExceptionReset(__pyx_t_19, __pyx_t_18, __pyx_t_17);
          __pyx_L93_try_end:;
        }
      }
+11441:                     self._state_cond.acquire()
            __pyx_t_2 = __pyx_v_self->_state_cond;
            __Pyx_INCREF(__pyx_t_2);
            __pyx_t_5 = 0;
            {
              PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
              __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_acquire, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
              if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11441, __pyx_L86_error)
              __Pyx_GOTREF(__pyx_t_3);
            }
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+11442:                     locked = True
            __pyx_v_locked = 1;
+11443:                 except BaseException as exc:
          __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
          if (__pyx_t_12) {
            __Pyx_AddTraceback("questdb._client.QuestDB.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
            if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_2, &__pyx_t_4) < 0) __PYX_ERR(0, 11443, __pyx_L88_except_error)
            __Pyx_XGOTREF(__pyx_t_3);
            __Pyx_XGOTREF(__pyx_t_2);
            __Pyx_XGOTREF(__pyx_t_4);
            __Pyx_INCREF(__pyx_t_2);
            __pyx_v_exc = __pyx_t_2;
            /*try:*/ {
/* … */
            /*finally:*/ {
              /*normal exit:*/{
                __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
                goto __pyx_L100;
              }
              __pyx_L100:;
            }
            __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
            goto __pyx_L87_exception_handled;
          }
          goto __pyx_L88_except_error;
+11444:                     if interrupt is None:
              __pyx_t_9 = (__pyx_v_interrupt == Py_None);
              if (__pyx_t_9) {
/* … */
              }
            }
+11445:                         interrupt = exc
                __Pyx_INCREF(__pyx_v_exc);
                __Pyx_DECREF_SET(__pyx_v_interrupt, __pyx_v_exc);
+11446:             try:
      /*try:*/ {
+11447:                 if closed:
        if (__pyx_v_closed) {
/* … */
          goto __pyx_L105;
        }
+11448:                     self._conf_str = None
          __Pyx_INCREF(Py_None);
          __Pyx_GIVEREF(Py_None);
          __Pyx_GOTREF(__pyx_v_self->_conf_str);
          __Pyx_DECREF(__pyx_v_self->_conf_str);
          __pyx_v_self->_conf_str = Py_None;
 11449:                 else:
 11450:                     # The native close did not run, so the pointer
 11451:                     # goes back for a later close() to claim. The
 11452:                     # handle stays closing either way.
+11453:                     self._db = db
        /*else*/ {
          __pyx_v_self->_db = __pyx_v_db;
        }
        __pyx_L105:;
+11454:                 self._close_running = False
        __pyx_v_self->_close_running = 0;
 11455:                 # The first Python code here, so a pending interrupt
 11456:                 # fires in it before anyone is woken. The interrupt
 11457:                 # has been taken by then, and a second call wakes the
 11458:                 # waiters; one that is still not woken rechecks within
 11459:                 # five seconds.
+11460:                 try:
        {
          /*try:*/ {
/* … */
          }
          __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
          __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
          goto __pyx_L111_try_end;
          __pyx_L106_error:;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
          __pyx_L108_except_error:;
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
          goto __pyx_L103_error;
          __pyx_L107_exception_handled:;
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
          __pyx_L111_try_end:;
        }
      }
+11461:                     self._state_cond.notify_all()
            __pyx_t_2 = __pyx_v_self->_state_cond;
            __Pyx_INCREF(__pyx_t_2);
            __pyx_t_5 = 0;
            {
              PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
              __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_notify_all, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
              if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11461, __pyx_L106_error)
              __Pyx_GOTREF(__pyx_t_4);
            }
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+11462:                 except BaseException as exc:
          __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
          if (__pyx_t_12) {
            __Pyx_AddTraceback("questdb._client.QuestDB.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
            if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_2, &__pyx_t_3) < 0) __PYX_ERR(0, 11462, __pyx_L108_except_error)
            __Pyx_XGOTREF(__pyx_t_4);
            __Pyx_XGOTREF(__pyx_t_2);
            __Pyx_XGOTREF(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_2);
            __pyx_v_exc = __pyx_t_2;
            /*try:*/ {
/* … */
            /*finally:*/ {
              /*normal exit:*/{
                __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
                goto __pyx_L118;
              }
              __pyx_L117_error:;
              /*exception exit:*/{
                __Pyx_PyThreadState_declare
                __Pyx_PyThreadState_assign
                __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0;
                __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
                __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
                 __Pyx_ExceptionSwap(&__pyx_t_27, &__pyx_t_28, &__pyx_t_29);
                if ( unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
                __Pyx_XGOTREF(__pyx_t_14);
                __Pyx_XGOTREF(__pyx_t_15);
                __Pyx_XGOTREF(__pyx_t_16);
                __Pyx_XGOTREF(__pyx_t_27);
                __Pyx_XGOTREF(__pyx_t_28);
                __Pyx_XGOTREF(__pyx_t_29);
                __pyx_t_12 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_26 = __pyx_filename;
                {
                  __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
                }
                __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_14);
                __Pyx_XGIVEREF(__pyx_t_15);
                __Pyx_XGIVEREF(__pyx_t_16);
                __Pyx_ErrRestore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
                __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0;
                __pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_26;
                goto __pyx_L108_except_error;
              }
              __pyx_L118:;
            }
            __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
            goto __pyx_L107_exception_handled;
          }
          goto __pyx_L108_except_error;
+11463:                     if interrupt is None:
              __pyx_t_9 = (__pyx_v_interrupt == Py_None);
              if (__pyx_t_9) {
/* … */
              }
+11464:                         interrupt = exc
                __Pyx_INCREF(__pyx_v_exc);
                __Pyx_DECREF_SET(__pyx_v_interrupt, __pyx_v_exc);
+11465:                     try:
              {
                /*try:*/ {
/* … */
                }
                __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
                __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
                __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
                goto __pyx_L127_try_end;
                __pyx_L120_error:;
                __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
                __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
                __pyx_L122_except_error:;
                __Pyx_XGIVEREF(__pyx_t_16);
                __Pyx_XGIVEREF(__pyx_t_15);
                __Pyx_XGIVEREF(__pyx_t_14);
                __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_15, __pyx_t_14);
                goto __pyx_L117_error;
                __pyx_L121_exception_handled:;
                __Pyx_XGIVEREF(__pyx_t_16);
                __Pyx_XGIVEREF(__pyx_t_15);
                __Pyx_XGIVEREF(__pyx_t_14);
                __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_15, __pyx_t_14);
                __pyx_L127_try_end:;
              }
            }
+11466:                         self._state_cond.notify_all()
                  __pyx_t_21 = __pyx_v_self->_state_cond;
                  __Pyx_INCREF(__pyx_t_21);
                  __pyx_t_5 = 0;
                  {
                    PyObject *__pyx_callargs[2] = {__pyx_t_21, NULL};
                    __pyx_t_8 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_notify_all, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
                    __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
                    if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11466, __pyx_L120_error)
                    __Pyx_GOTREF(__pyx_t_8);
                  }
                  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+11467:                     except BaseException:
                __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
                if (__pyx_t_12) {
                  __Pyx_ErrRestore(0,0,0);
                  goto __pyx_L121_exception_handled;
                }
                goto __pyx_L122_except_error;
 11468:                         pass
 11469:             finally:
+11470:                 self._state_cond.release()
      /*finally:*/ {
        /*normal exit:*/{
          __pyx_t_2 = __pyx_v_self->_state_cond;
          __Pyx_INCREF(__pyx_t_2);
          __pyx_t_5 = 0;
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
            __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11470, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_3);
          }
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
            __pyx_t_2 = __pyx_v_self->_state_cond;
            __Pyx_INCREF(__pyx_t_2);
            __pyx_t_5 = 0;
            {
              PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
              __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
              if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11470, __pyx_L136_error)
              __Pyx_GOTREF(__pyx_t_3);
            }
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+11471:                 if closed:
          if (__pyx_v_closed) {
/* … */
          }
          goto __pyx_L104;
        }
        __pyx_L103_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_29 = 0; __pyx_t_28 = 0; __pyx_t_27 = 0;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
           __Pyx_ExceptionSwap(&__pyx_t_29, &__pyx_t_28, &__pyx_t_27);
          if ( unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17);
          __Pyx_XGOTREF(__pyx_t_19);
          __Pyx_XGOTREF(__pyx_t_18);
          __Pyx_XGOTREF(__pyx_t_17);
          __Pyx_XGOTREF(__pyx_t_29);
          __Pyx_XGOTREF(__pyx_t_28);
          __Pyx_XGOTREF(__pyx_t_27);
          __pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_30 = __pyx_filename;
          {
/* … */
            if (__pyx_v_closed) {
/* … */
            }
          }
          __Pyx_XGIVEREF(__pyx_t_29);
          __Pyx_XGIVEREF(__pyx_t_28);
          __Pyx_XGIVEREF(__pyx_t_27);
          __Pyx_ExceptionReset(__pyx_t_29, __pyx_t_28, __pyx_t_27);
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_ErrRestore(__pyx_t_19, __pyx_t_18, __pyx_t_17);
          __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_29 = 0; __pyx_t_28 = 0; __pyx_t_27 = 0;
          __pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_30;
          goto __pyx_L1_error;
          __pyx_L136_error:;
          __Pyx_XGIVEREF(__pyx_t_29);
          __Pyx_XGIVEREF(__pyx_t_28);
          __Pyx_XGIVEREF(__pyx_t_27);
          __Pyx_ExceptionReset(__pyx_t_29, __pyx_t_28, __pyx_t_27);
          __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
          __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
          __pyx_t_29 = 0; __pyx_t_28 = 0; __pyx_t_27 = 0;
          goto __pyx_L1_error;
        }
        __pyx_L104:;
      }
+11472:                     _release_callback_refs(self._cb_refs_key)
            __pyx_t_3 = __pyx_f_7questdb_7_client__release_callback_refs(__pyx_v_self->_cb_refs_key); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11472, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
              __pyx_t_3 = __pyx_f_7questdb_7_client__release_callback_refs(__pyx_v_self->_cb_refs_key); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11472, __pyx_L136_error)
              __Pyx_GOTREF(__pyx_t_3);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+11473:                     self._cb_refs_key = 0
            __pyx_v_self->_cb_refs_key = 0;
/* … */
              __pyx_v_self->_cb_refs_key = 0;
+11474:                     self._dispatch_context = None
            __Pyx_INCREF(Py_None);
            __Pyx_GIVEREF(Py_None);
            __Pyx_GOTREF(__pyx_v_self->_dispatch_context);
            __Pyx_DECREF(__pyx_v_self->_dispatch_context);
            __pyx_v_self->_dispatch_context = Py_None;
/* … */
              __Pyx_INCREF(Py_None);
              __Pyx_GIVEREF(Py_None);
              __Pyx_GOTREF(__pyx_v_self->_dispatch_context);
              __Pyx_DECREF(__pyx_v_self->_dispatch_context);
              __pyx_v_self->_dispatch_context = Py_None;
+11475:                     self._error_handler = None
            __Pyx_INCREF(Py_None);
            __Pyx_GIVEREF(Py_None);
            __Pyx_GOTREF(__pyx_v_self->_error_handler);
            __Pyx_DECREF(__pyx_v_self->_error_handler);
            __pyx_v_self->_error_handler = Py_None;
/* … */
              __Pyx_INCREF(Py_None);
              __Pyx_GIVEREF(Py_None);
              __Pyx_GOTREF(__pyx_v_self->_error_handler);
              __Pyx_DECREF(__pyx_v_self->_error_handler);
              __pyx_v_self->_error_handler = Py_None;
+11476:                     self._connection_listener = None
            __Pyx_INCREF(Py_None);
            __Pyx_GIVEREF(Py_None);
            __Pyx_GOTREF(__pyx_v_self->_connection_listener);
            __Pyx_DECREF(__pyx_v_self->_connection_listener);
            __pyx_v_self->_connection_listener = Py_None;
/* … */
              __Pyx_INCREF(Py_None);
              __Pyx_GIVEREF(Py_None);
              __Pyx_GOTREF(__pyx_v_self->_connection_listener);
              __Pyx_DECREF(__pyx_v_self->_connection_listener);
              __pyx_v_self->_connection_listener = Py_None;
+11477:                     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;
/* … */
              __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;
+11478:                     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(0, 11478, __pyx_L1_error)
/* … */
              if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_bearer_token_provider, Py_None) < (0)) __PYX_ERR(0, 11478, __pyx_L136_error)
+11479:             if interrupt is not None:
      __pyx_t_9 = (__pyx_v_interrupt != Py_None);
      if (unlikely(__pyx_t_9)) {
/* … */
      }
      goto __pyx_L83;
    }
    __pyx_L83:;
  }
+11480:                 raise interrupt
        __Pyx_Raise(__pyx_v_interrupt, 0, 0, 0);
        __PYX_ERR(0, 11480, __pyx_L1_error)
 11481: 
+11482:     def __exit__(self, exc_type, exc_val, exc_tb):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_25__exit__(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_7QuestDB_24__exit__, "\n        Close the handle at the end of a ``with`` block.\n\n        When the most recent :meth:`close` on the handle was given a\n        number of seconds, this close waits only for what is left of\n        that budget; otherwise it closes with the limits of a\n        :meth:`close` with no arguments.\n\n        Leaving the block on an exception still closes, but a close\n        that cannot finish is reported through the ``questdb`` logger\n        instead of raised: the frames unwinding here are often the\n        ones holding the leases the close is waiting for, so raising\n        would replace the exception being reported with a complaint\n        that follows from it. Leaving the block normally raises as\n        :meth:`close` does -- a lease left open there is a leak worth\n        hearing about.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_7QuestDB_25__exit__ = {"__exit__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_7QuestDB_25__exit__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_7QuestDB_24__exit__};
static PyObject *__pyx_pw_7questdb_7_client_7QuestDB_25__exit__(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_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_exc_type,&__pyx_mstate_global->__pyx_n_u_exc_val,&__pyx_mstate_global->__pyx_n_u_exc_tb,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(0, 11482, __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(0, 11482, __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(0, 11482, __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(0, 11482, __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(0, 11482, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, i); __PYX_ERR(0, 11482, __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(0, 11482, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 11482, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 11482, __pyx_L3_error)
    }
    __pyx_v_exc_type = values[0];
    __pyx_v_exc_val = values[1];
    __pyx_v_exc_tb = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 11482, __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.QuestDB.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_7QuestDB_24__exit__(((struct __pyx_obj_7questdb_7_client_QuestDB *)__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_7QuestDB_24__exit__(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self, PyObject *__pyx_v_exc_type, CYTHON_UNUSED PyObject *__pyx_v_exc_val, CYTHON_UNUSED PyObject *__pyx_v_exc_tb) {
  PyObject *__pyx_v_deadline = NULL;
  PyObject *__pyx_v_timeout = 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_2);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __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.QuestDB.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_deadline);
  __Pyx_XDECREF(__pyx_v_timeout);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_7QuestDB_25__exit__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_QuestDB___exit, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[220])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 11482, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB, __pyx_mstate_global->__pyx_n_u_exit, __pyx_t_25) < (0)) __PYX_ERR(0, 11482, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 11483:         """
 11484:         Close the handle at the end of a ``with`` block.
 11485: 
 11486:         When the most recent :meth:`close` on the handle was given a
 11487:         number of seconds, this close waits only for what is left of
 11488:         that budget; otherwise it closes with the limits of a
 11489:         :meth:`close` with no arguments.
 11490: 
 11491:         Leaving the block on an exception still closes, but a close
 11492:         that cannot finish is reported through the ``questdb`` logger
 11493:         instead of raised: the frames unwinding here are often the
 11494:         ones holding the leases the close is waiting for, so raising
 11495:         would replace the exception being reported with a complaint
 11496:         that follows from it. Leaving the block normally raises as
 11497:         :meth:`close` does -- a lease left open there is a leak worth
 11498:         hearing about.
 11499:         """
 11500:         # Held through `acquire` and `release`, as in `close()`.
+11501:         self._state_cond.acquire()
  __pyx_t_2 = __pyx_v_self->_state_cond;
  __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_acquire, __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(0, 11501, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+11502:         try:
  /*try:*/ {
+11503:             deadline = self._close_deadline
    __pyx_t_1 = __pyx_v_self->_close_deadline;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_v_deadline = __pyx_t_1;
    __pyx_t_1 = 0;
  }
 11504:         finally:
+11505:             self._state_cond.release()
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_2 = __pyx_v_self->_state_cond;
      __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_release, __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(0, 11505, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L5;
    }
    __pyx_L5:;
  }
+11506:         if deadline is None:
  __pyx_t_4 = (__pyx_v_deadline == Py_None);
  if (__pyx_t_4) {
/* … */
    goto __pyx_L6;
  }
+11507:             timeout = _CLOSE_TIMEOUT_DEFAULT
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_CLOSE_TIMEOUT_DEFAULT); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11507, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_timeout = __pyx_t_1;
    __pyx_t_1 = 0;
 11508:         else:
+11509:             timeout = max(deadline - time.monotonic(), 0.0)
  /*else*/ {
    __pyx_t_5 = 0.0;
    __pyx_t_2 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_time); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11509, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_monotonic); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11509, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_3 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7);
      assert(__pyx_t_2);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
      __pyx_t_3 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __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_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11509, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __pyx_t_7 = PyNumber_Subtract(__pyx_v_deadline, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11509, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_2 = PyFloat_FromDouble(__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11509, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_6 = PyObject_RichCompare(__pyx_t_2, __pyx_t_7, Py_GT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11509, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 11509, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (__pyx_t_4) {
      __pyx_t_6 = PyFloat_FromDouble(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 11509, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_1 = __pyx_t_6;
      __pyx_t_6 = 0;
    } else {
      __Pyx_INCREF(__pyx_t_7);
      __pyx_t_1 = __pyx_t_7;
    }
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __pyx_t_1;
    __Pyx_INCREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_timeout = __pyx_t_7;
    __pyx_t_7 = 0;
  }
  __pyx_L6:;
+11510:         if exc_type is None:
  __pyx_t_4 = (__pyx_v_exc_type == Py_None);
  if (__pyx_t_4) {
/* … */
  }
+11511:             self.close(timeout)
    __pyx_t_8.__pyx_n = 1;
    __pyx_t_8.timeout = __pyx_v_timeout;
    __pyx_t_7 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0, &__pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11511, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+11512:             return
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+11513:         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_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
    __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_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:;
  }
+11514:             self.close(timeout)
      __pyx_t_8.__pyx_n = 1;
      __pyx_t_8.timeout = __pyx_v_timeout;
      __pyx_t_7 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0, &__pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11514, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+11515:         except QuestDBError:
    __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_1, &__pyx_t_6);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11515, __pyx_L10_except_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_12 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_7, __pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_ErrRestore(__pyx_t_7, __pyx_t_1, __pyx_t_6);
    __pyx_t_7 = 0; __pyx_t_1 = 0; __pyx_t_6 = 0;
    if (__pyx_t_12) {
      __Pyx_AddTraceback("questdb._client.QuestDB.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(0, 11515, __pyx_L10_except_error)
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_1);
      __Pyx_XGOTREF(__pyx_t_7);
+11516:             logging.getLogger('questdb').exception(
      __pyx_t_15 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 11516, __pyx_L10_except_error)
      __Pyx_GOTREF(__pyx_t_16);
      __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_getLogger); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 11516, __pyx_L10_except_error)
      __Pyx_GOTREF(__pyx_t_17);
      __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
      __pyx_t_3 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_17))) {
        __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_17);
        assert(__pyx_t_15);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_17);
        __Pyx_INCREF(__pyx_t_15);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_17, __pyx__function);
        __pyx_t_3 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_15, __pyx_mstate_global->__pyx_n_u_questdb};
        __pyx_t_14 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_17, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
        if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 11516, __pyx_L10_except_error)
        __Pyx_GOTREF(__pyx_t_14);
      }
      __pyx_t_13 = __pyx_t_14;
      __Pyx_INCREF(__pyx_t_13);
      __pyx_t_3 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_mstate_global->__pyx_kp_u_QuestDB_close_could_not_finish_w};
        __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_exception, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (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_2)) __PYX_ERR(0, 11516, __pyx_L10_except_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L9_exception_handled;
    }
    goto __pyx_L10_except_error;
 11517:                 'QuestDB.close() could not finish while leaving a '
 11518:                 '`with` block that was already raising. The handle '
 11519:                 'stays closing; the original exception follows.')
 11520: 
+11521:     def __dealloc__(self):
/* Python wrapper */
static void __pyx_pw_7questdb_7_client_7QuestDB_27__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7questdb_7_client_7QuestDB_27__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_7QuestDB_26__dealloc__(((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_v_self));

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

static void __pyx_pf_7questdb_7_client_7QuestDB_26__dealloc__(struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_self) {
  struct questdb_db *__pyx_v_db;
  PyThreadState *__pyx_v_gs;
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_WriteUnraisable("questdb._client.QuestDB.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}
 11522:         cdef questdb_db* db
+11523:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+11524:         if self._db != NULL:
  __pyx_t_1 = (__pyx_v_self->_db != NULL);
  if (__pyx_t_1) {
/* … */
  }
+11525:             db = self._db
    __pyx_t_2 = __pyx_v_self->_db;
    __pyx_v_db = __pyx_t_2;
+11526:             self._db = NULL
    __pyx_v_self->_db = NULL;
+11527:             _ensure_doesnt_have_gil(&gs)
    (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+11528:             questdb_db_close(db)
    questdb_db_close(__pyx_v_db);
+11529:             _ensure_has_gil(&gs)
    __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+11530:         _release_callback_refs(self._cb_refs_key)
  __pyx_t_3 = __pyx_f_7questdb_7_client__release_callback_refs(__pyx_v_self->_cb_refs_key); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11530, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+11531:         self._cb_refs_key = 0
  __pyx_v_self->_cb_refs_key = 0;
 11532: 
 11533: 
+11534: @cython.no_gc_clear
struct __pyx_vtabstruct_7questdb_7_client_Sender {
  __pyx_t_7questdb_7_client_void_int (*_set_sender_fields)(struct __pyx_obj_7questdb_7_client_Sender *, struct qdb_pystr_buf *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *);
  PyObject *(*_new_buffer_for_sender)(struct __pyx_obj_7questdb_7_client_Sender *);
  PyObject *(*flush)(struct __pyx_obj_7questdb_7_client_Sender *, int __pyx_skip_dispatch, struct __pyx_opt_args_7questdb_7_client_6Sender_flush *__pyx_optional_args);
  __pyx_t_7questdb_7_client_void_int (*_flush_c_buf)(struct __pyx_obj_7questdb_7_client_Sender *, struct __pyx_obj_7questdb_7_client_Buffer *, int, int, int);
  int (*_enter_native)(struct __pyx_obj_7questdb_7_client_Sender *);
  void (*_exit_native)(struct __pyx_obj_7questdb_7_client_Sender *, int);
  __pyx_t_7questdb_7_client_void_int (*_check_not_in_own_callback)(struct __pyx_obj_7questdb_7_client_Sender *, PyObject *, struct __pyx_opt_args_7questdb_7_client_6Sender__check_not_in_own_callback *__pyx_optional_args);
  __pyx_t_7questdb_7_client_void_int (*_check_qwp_ws)(struct __pyx_obj_7questdb_7_client_Sender *, PyObject *);
  __pyx_t_7questdb_7_client_void_int (*_check_buffer_protocol)(struct __pyx_obj_7questdb_7_client_Sender *, struct __pyx_obj_7questdb_7_client_Buffer *);
  PyObject *(*_close)(struct __pyx_obj_7questdb_7_client_Sender *, struct __pyx_opt_args_7questdb_7_client_6Sender__close *__pyx_optional_args);
  PyObject *(*close)(struct __pyx_obj_7questdb_7_client_Sender *, int __pyx_skip_dispatch, struct __pyx_opt_args_7questdb_7_client_6Sender_close *__pyx_optional_args);
};
static struct __pyx_vtabstruct_7questdb_7_client_Sender *__pyx_vtabptr_7questdb_7_client_Sender;
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Sender__new_buffer_for_sender(struct __pyx_obj_7questdb_7_client_Sender *);
static CYTHON_INLINE int __pyx_f_7questdb_7_client_6Sender__enter_native(struct __pyx_obj_7questdb_7_client_Sender *);
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Sender__exit_native(struct __pyx_obj_7questdb_7_client_Sender *, int);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(struct __pyx_obj_7questdb_7_client_Sender *, PyObject *, struct __pyx_opt_args_7questdb_7_client_6Sender__check_not_in_own_callback *__pyx_optional_args);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(struct __pyx_obj_7questdb_7_client_Sender *, PyObject *);
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Sender__check_buffer_protocol(struct __pyx_obj_7questdb_7_client_Sender *, struct __pyx_obj_7questdb_7_client_Buffer *);

 11535: cdef class Sender:
 11536:     """
 11537:     Ingest data into QuestDB over a single connection.
 11538: 
 11539:     This is the connection-level API: one sender drives exactly one
 11540:     connection (ILP/HTTP, ILP/TCP, QWP/UDP, or a single QWP/WebSocket
 11541:     connection) and carries the point-to-point capabilities the
 11542:     deployment-level handle does not: HTTP transactions, UDP datagrams,
 11543:     and manual ws progress and buffer control. For pooled ingestion and
 11544:     queries, prefer :func:`questdb.connect`.
 11545: 
 11546:     See the :ref:`sender` documentation for more information.
 11547:     """
 11548: 
 11549:     # We need the Buffer held by a Sender can hold a weakref to its Sender.
 11550:     # This avoids a circular reference that requires the GC to clean up.
 11551:     cdef object __weakref__
 11552: 
 11553:     cdef line_sender_protocol _c_protocol
 11554:     cdef line_sender_opts* _opts
 11555:     cdef line_sender* _impl
 11556:     cdef Buffer _buffer
 11557:     cdef object _thread_owner_token
 11558:     cdef object _dispatch_context
 11559:     cdef object _error_handler
 11560:     cdef object _connection_listener
 11561:     cdef object _oidc_auth
 11562:     # The bearer-token holder on CPython; see `_sender_hold_bearer`.
 11563:     cdef object _bearer_holder
 11564:     # Holds the bearer-token holder on PyPy only, where a cpyext field would
 11565:     # hide it from the collector and a provider that owns this sender could
 11566:     # never be collected. CPython keeps the pointer NULL: an instance
 11567:     # dictionary, even an empty one, stops CPython caching the method lookup
 11568:     # of `sender.row(...)`, which is made once per row. `__setattr__` keeps
 11569:     # every other name out of it. Reading `__dict__` recreates it; see
 11570:     # `_sender_drop_unused_dict`.
 11571:     cdef dict __dict__
 11572:     cdef auto_flush_mode_t _auto_flush_mode
 11573:     cdef bint _auto_flush_bytes_dynamic
 11574:     cdef int64_t* _last_flush_ms
 11575:     cdef size_t _init_buf_size
 11576:     cdef bint _in_txn
 11577:     # Set while a GIL-released native call borrows this sender/buffer: another
 11578:     # thread must not free the sender or mutate its buffer before the call
 11579:     # returns. An OIDC diagnostic or a token-provider callback can also
 11580:     # reacquire the GIL on that very thread and run arbitrary logging or
 11581:     # signal handlers before then. See `_enter_native`.
 11582:     cdef bint _native_in_flight
 11583:     cdef int64_t _slot_id
 11584:     # A clone of the fully-configured opts for QWP/WebSocket senders, retained
 11585:     # so dataframe() can open a poolless direct columnar connection per call
 11586:     # (carrying auth/TLS). NULL for other protocols.
 11587:     cdef line_sender_opts* _qwp_ws_opts
 11588:     cdef size_t _cb_refs_key
 11589: 
+11590:     cdef void_int _set_sender_fields(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Sender__set_sender_fields(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, struct qdb_pystr_buf *__pyx_v_b, PyObject *__pyx_v_protocol, PyObject *__pyx_v_bind_interface, PyObject *__pyx_v_username, PyObject *__pyx_v_password, PyObject *__pyx_v_token, PyObject *__pyx_v_oidc_auth, PyObject *__pyx_v_bearer_token_provider, PyObject *__pyx_v_token_x, PyObject *__pyx_v_token_y, PyObject *__pyx_v_auth_timeout, PyObject *__pyx_v_tls_verify, PyObject *__pyx_v_tls_ca, PyObject *__pyx_v_tls_roots, PyObject *__pyx_v_tls_roots_password, PyObject *__pyx_v_max_buf_size, PyObject *__pyx_v_retry_timeout, PyObject *__pyx_v_retry_max_backoff, PyObject *__pyx_v_request_min_throughput, PyObject *__pyx_v_request_timeout, PyObject *__pyx_v_auto_flush, PyObject *__pyx_v_auto_flush_rows, PyObject *__pyx_v_auto_flush_bytes, PyObject *__pyx_v_auto_flush_interval, PyObject *__pyx_v_max_datagram_size, PyObject *__pyx_v_multicast_ttl, PyObject *__pyx_v_protocol_version, PyObject *__pyx_v_qwp_ws_progress, PyObject *__pyx_v_error_handler, PyObject *__pyx_v_connection_listener, PyObject *__pyx_v_connection_event_inbox_capacity, PyObject *__pyx_v_init_buf_size, PyObject *__pyx_v_max_name_len) {
  struct line_sender_error *__pyx_v_err;
  PyObject *__pyx_v_user_agent = 0;
  struct line_sender_utf8 __pyx_v_c_user_agent;
  struct line_sender_utf8 __pyx_v_c_bind_interface;
  struct line_sender_utf8 __pyx_v_c_username;
  struct line_sender_utf8 __pyx_v_c_password;
  struct line_sender_utf8 __pyx_v_c_token;
  struct line_sender_utf8 __pyx_v_c_token_x;
  struct line_sender_utf8 __pyx_v_c_token_y;
  uint64_t __pyx_v_c_auth_timeout;
  int __pyx_v_c_tls_verify;
  enum line_sender_ca __pyx_v_c_tls_ca;
  struct line_sender_utf8 __pyx_v_c_tls_roots;
  struct line_sender_utf8 __pyx_v_c_tls_roots_password;
  uint64_t __pyx_v_c_max_buf_size;
  uint64_t __pyx_v_c_retry_timeout;
  uint64_t __pyx_v_c_retry_max_backoff;
  uint64_t __pyx_v_c_request_min_throughput;
  uint64_t __pyx_v_c_request_timeout;
  size_t __pyx_v_c_max_name_len;
  size_t __pyx_v_c_max_datagram_size;
  uint32_t __pyx_v_c_multicast_ttl;
  enum line_sender_qwpws_progress __pyx_v_c_qwp_ws_progress;
  PyObject *__pyx_v__conflicting = NULL;
  PyObject *__pyx_v__holder = NULL;
  PyObject *__pyx_9genexpr31__pyx_v_name = NULL;
  PyObject *__pyx_9genexpr31__pyx_v_value = NULL;
  PyObject *__pyx_gb_7questdb_7_client_6Sender_18_set_sender_fields_2generator11 = 0;
  PyObject *__pyx_9genexpr33__pyx_v_name = NULL;
  PyObject *__pyx_9genexpr33__pyx_v_value = NULL;
  PyObject *__pyx_gb_7questdb_7_client_6Sender_18_set_sender_fields_5generator12 = 0;
  __pyx_t_7questdb_7_client_void_int __pyx_r;
  __Pyx_INCREF(__pyx_v_tls_roots);
  __Pyx_INCREF(__pyx_v_auto_flush_bytes);
  __Pyx_INCREF(__pyx_v_error_handler);
/* … */
  /* 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_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_XDECREF(__pyx_t_21);
  __Pyx_AddTraceback("questdb._client.Sender._set_sender_fields", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_user_agent);
  __Pyx_XDECREF(__pyx_v__conflicting);
  __Pyx_XDECREF(__pyx_v__holder);
  __Pyx_XDECREF(__pyx_9genexpr31__pyx_v_name);
  __Pyx_XDECREF(__pyx_9genexpr31__pyx_v_value);
  __Pyx_XDECREF(__pyx_gb_7questdb_7_client_6Sender_18_set_sender_fields_2generator11);
  __Pyx_XDECREF(__pyx_9genexpr33__pyx_v_name);
  __Pyx_XDECREF(__pyx_9genexpr33__pyx_v_value);
  __Pyx_XDECREF(__pyx_gb_7questdb_7_client_6Sender_18_set_sender_fields_5generator12);
  __Pyx_XDECREF(__pyx_v_tls_roots);
  __Pyx_XDECREF(__pyx_v_auto_flush_bytes);
  __Pyx_XDECREF(__pyx_v_error_handler);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 11591:             self,
 11592:             qdb_pystr_buf* b,
 11593:             object protocol,
 11594:             str bind_interface,
 11595:             str username,
 11596:             str password,
 11597:             str token,
 11598:             object oidc_auth,
 11599:             object bearer_token_provider,
 11600:             str token_x,
 11601:             str token_y,
 11602:             object auth_timeout,
 11603:             object tls_verify,
 11604:             object tls_ca,
 11605:             object tls_roots,
 11606:             object tls_roots_password,
 11607:             object max_buf_size,
 11608:             object retry_timeout,
 11609:             object retry_max_backoff,
 11610:             object request_min_throughput,
 11611:             object request_timeout,
 11612:             object auto_flush,
 11613:             object auto_flush_rows,
 11614:             object auto_flush_bytes,
 11615:             object auto_flush_interval,
 11616:             object max_datagram_size,
 11617:             object multicast_ttl,
 11618:             object protocol_version,
 11619:             object qwp_ws_progress,
 11620:             object error_handler,
 11621:             object connection_listener,
 11622:             object connection_event_inbox_capacity,
 11623:             object init_buf_size,
 11624:             object max_name_len) except -1:
 11625:         """
 11626:         Set optional parameters for the sender.
 11627:         """
+11628:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+11629:         cdef str user_agent = 'questdb/python/' + VERSION
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_VERSION); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11629, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyNumber_Add(__pyx_mstate_global->__pyx_kp_u_questdb_python, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11629, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!(likely(PyUnicode_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_2))) __PYX_ERR(0, 11629, __pyx_L1_error)
  __pyx_v_user_agent = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
 11630:         cdef line_sender_utf8 c_user_agent
 11631:         cdef line_sender_utf8 c_bind_interface
 11632:         cdef line_sender_utf8 c_username
 11633:         cdef line_sender_utf8 c_password
 11634:         cdef line_sender_utf8 c_token
 11635:         cdef line_sender_utf8 c_token_x
 11636:         cdef line_sender_utf8 c_token_y
 11637:         cdef uint64_t c_auth_timeout
 11638:         cdef bint c_tls_verify
 11639:         cdef line_sender_ca c_tls_ca
 11640:         cdef line_sender_utf8 c_tls_roots
 11641:         cdef line_sender_utf8 c_tls_roots_password
 11642:         cdef uint64_t c_max_buf_size
 11643:         cdef uint64_t c_retry_timeout
 11644:         cdef uint64_t c_retry_max_backoff
 11645:         cdef uint64_t c_request_min_throughput
 11646:         cdef uint64_t c_request_timeout
 11647:         cdef size_t c_max_name_len
+11648:         cdef size_t c_max_datagram_size = 0
  __pyx_v_c_max_datagram_size = 0;
+11649:         cdef uint32_t c_multicast_ttl = 0
  __pyx_v_c_multicast_ttl = 0;
 11650:         cdef line_sender_qwpws_progress c_qwp_ws_progress
 11651: 
+11652:         self._c_protocol = protocol.c_value
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_protocol, __pyx_mstate_global->__pyx_n_u_c_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11652, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = ((enum line_sender_protocol)__Pyx_PyLong_As_enum__line_sender_protocol(__pyx_t_2)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 11652, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_self->_c_protocol = __pyx_t_3;
 11653: 
 11654:         # It's OK to override this setting.
+11655:         str_to_utf8(b, <PyObject*>user_agent, &c_user_agent)
  __pyx_t_4 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_user_agent), (&__pyx_v_c_user_agent)); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11655, __pyx_L1_error)
+11656:         if not line_sender_opts_user_agent(self._opts, c_user_agent, &err):
  __pyx_t_5 = (!line_sender_opts_user_agent(__pyx_v_self->_opts, __pyx_v_c_user_agent, (&__pyx_v_err)));
  if (unlikely(__pyx_t_5)) {
/* … */
  }
+11657:             raise c_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11657, __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(0, 11657, __pyx_L1_error)
 11658: 
+11659:         if bind_interface is not None:
  __pyx_t_5 = (__pyx_v_bind_interface != ((PyObject*)Py_None));
  if (__pyx_t_5) {
/* … */
  }
+11660:             str_to_utf8(b, <PyObject*>bind_interface, &c_bind_interface)
    __pyx_t_4 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_bind_interface), (&__pyx_v_c_bind_interface)); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11660, __pyx_L1_error)
+11661:             if not line_sender_opts_bind_interface(
    __pyx_t_5 = (!line_sender_opts_bind_interface(__pyx_v_self->_opts, __pyx_v_c_bind_interface, (&__pyx_v_err)));
    if (unlikely(__pyx_t_5)) {
/* … */
    }
 11662:                     self._opts, c_bind_interface, &err):
+11663:                 raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11663, __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(0, 11663, __pyx_L1_error)
 11664: 
+11665:         if max_datagram_size is not None:
  __pyx_t_5 = (__pyx_v_max_datagram_size != Py_None);
  if (__pyx_t_5) {
/* … */
  }
+11666:             if not _is_qwp_udp_protocol(self._c_protocol):
    __pyx_t_5 = __pyx_f_7questdb_7_client__is_qwp_udp_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11666, __pyx_L1_error)
    __pyx_t_6 = (!__pyx_t_5);
    if (unlikely(__pyx_t_6)) {
/* … */
    }
+11667:                 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(0, 11667, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
+11668:                     QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11668, __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(0, 11668, __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_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_10 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_9, __pyx_mstate_global->__pyx_kp_u_max_datagram_size_is_only_suppo};
        __pyx_t_2 = __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_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_2)) __PYX_ERR(0, 11667, __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(0, 11667, __pyx_L1_error)
 11669:                     '"max_datagram_size" is only supported for QWP/UDP senders.')
+11670:             if not isinstance(max_datagram_size, int) or isinstance(max_datagram_size, bool):
    __pyx_t_5 = PyLong_Check(__pyx_v_max_datagram_size); 
    __pyx_t_11 = (!__pyx_t_5);
    if (!__pyx_t_11) {
    } else {
      __pyx_t_6 = __pyx_t_11;
      goto __pyx_L9_bool_binop_done;
    }
    __pyx_t_11 = __Pyx_TypeCheck(__pyx_v_max_datagram_size, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); 
    __pyx_t_6 = __pyx_t_11;
    __pyx_L9_bool_binop_done:;
    if (unlikely(__pyx_t_6)) {
/* … */
    }
+11671:                 raise TypeError(
      __pyx_t_7 = NULL;
+11672:                     '"max_datagram_size" must be a positive int, '
      __pyx_t_9 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_max_datagram_size_must_be_a_pos, __pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 11672, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_10 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_9};
        __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__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_2)) __PYX_ERR(0, 11671, __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(0, 11671, __pyx_L1_error)
+11673:                     f'not {_fqn(type(max_datagram_size))}')
      __pyx_t_9 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_max_datagram_size)))); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 11673, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11673, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+11674:             if max_datagram_size <= 0 or max_datagram_size > 65507:
    __pyx_t_2 = PyObject_RichCompare(__pyx_v_max_datagram_size, __pyx_mstate_global->__pyx_int_0, Py_LE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11674, __pyx_L1_error)
    __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 11674, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (!__pyx_t_11) {
    } else {
      __pyx_t_6 = __pyx_t_11;
      goto __pyx_L12_bool_binop_done;
    }
    __pyx_t_2 = PyObject_RichCompare(__pyx_v_max_datagram_size, __pyx_mstate_global->__pyx_int_65507, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11674, __pyx_L1_error)
    __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 11674, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_6 = __pyx_t_11;
    __pyx_L12_bool_binop_done:;
    if (unlikely(__pyx_t_6)) {
/* … */
    }
+11675:                 raise ValueError(
      __pyx_t_9 = NULL;
+11676:                     '"max_datagram_size" must be an int between 1 and 65507, '
      __pyx_t_1 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_max_datagram_size_must_be_an_in, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11676, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_10 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_1};
        __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11675, __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(0, 11675, __pyx_L1_error)
+11677:                     f'not {max_datagram_size!r}')
      __pyx_t_7 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_max_datagram_size), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11677, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
+11678:             c_max_datagram_size = max_datagram_size
    __pyx_t_10 = __Pyx_PyLong_As_size_t(__pyx_v_max_datagram_size); if (unlikely((__pyx_t_10 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 11678, __pyx_L1_error)
    __pyx_v_c_max_datagram_size = __pyx_t_10;
+11679:             if not line_sender_opts_max_datagram_size(
    __pyx_t_6 = (!line_sender_opts_max_datagram_size(__pyx_v_self->_opts, __pyx_v_c_max_datagram_size, (&__pyx_v_err)));
    if (unlikely(__pyx_t_6)) {
/* … */
    }
 11680:                     self._opts, c_max_datagram_size, &err):
+11681:                 raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11681, __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(0, 11681, __pyx_L1_error)
 11682: 
+11683:         if multicast_ttl is not None:
  __pyx_t_6 = (__pyx_v_multicast_ttl != Py_None);
  if (__pyx_t_6) {
/* … */
  }
+11684:             if not _is_qwp_udp_protocol(self._c_protocol):
    __pyx_t_6 = __pyx_f_7questdb_7_client__is_qwp_udp_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_6 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11684, __pyx_L1_error)
    __pyx_t_11 = (!__pyx_t_6);
    if (unlikely(__pyx_t_11)) {
/* … */
    }
+11685:                 raise QuestDBError(
      __pyx_t_1 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 11685, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
+11686:                     QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11686, __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(0, 11686, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_10 = 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_10 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_8, __pyx_mstate_global->__pyx_kp_u_multicast_ttl_is_only_supported};
        __pyx_t_2 = __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_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11685, __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(0, 11685, __pyx_L1_error)
 11687:                     '"multicast_ttl" is only supported for QWP/UDP senders.')
+11688:             if not isinstance(multicast_ttl, int) or isinstance(multicast_ttl, bool):
    __pyx_t_6 = PyLong_Check(__pyx_v_multicast_ttl); 
    __pyx_t_5 = (!__pyx_t_6);
    if (!__pyx_t_5) {
    } else {
      __pyx_t_11 = __pyx_t_5;
      goto __pyx_L18_bool_binop_done;
    }
    __pyx_t_5 = __Pyx_TypeCheck(__pyx_v_multicast_ttl, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); 
    __pyx_t_11 = __pyx_t_5;
    __pyx_L18_bool_binop_done:;
    if (unlikely(__pyx_t_11)) {
/* … */
    }
+11689:                 raise TypeError(
      __pyx_t_9 = NULL;
+11690:                     '"multicast_ttl" must be an int (0-255), '
      __pyx_t_8 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_multicast_ttl_must_be_an_int_0, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11690, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_10 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_8};
        __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__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;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11689, __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(0, 11689, __pyx_L1_error)
+11691:                     f'not {_fqn(type(multicast_ttl))}')
      __pyx_t_8 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_multicast_ttl)))); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11691, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11691, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+11692:             if multicast_ttl < 0 or multicast_ttl > 255:
    __pyx_t_2 = PyObject_RichCompare(__pyx_v_multicast_ttl, __pyx_mstate_global->__pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11692, __pyx_L1_error)
    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 11692, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (!__pyx_t_5) {
    } else {
      __pyx_t_11 = __pyx_t_5;
      goto __pyx_L21_bool_binop_done;
    }
    __pyx_t_2 = PyObject_RichCompare(__pyx_v_multicast_ttl, __pyx_mstate_global->__pyx_int_255, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11692, __pyx_L1_error)
    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 11692, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_11 = __pyx_t_5;
    __pyx_L21_bool_binop_done:;
    if (unlikely(__pyx_t_11)) {
/* … */
    }
+11693:                 raise ValueError(
      __pyx_t_8 = NULL;
+11694:                     '"multicast_ttl" must be an int (0-255), '
      __pyx_t_1 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_multicast_ttl_must_be_an_int_0, __pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11694, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_10 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_1};
        __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11693, __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(0, 11693, __pyx_L1_error)
+11695:                     f'not {multicast_ttl!r}')
      __pyx_t_9 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_multicast_ttl), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 11695, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
+11696:             c_multicast_ttl = multicast_ttl
    __pyx_t_12 = __Pyx_PyLong_As_uint32_t(__pyx_v_multicast_ttl); if (unlikely((__pyx_t_12 == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 11696, __pyx_L1_error)
    __pyx_v_c_multicast_ttl = __pyx_t_12;
+11697:             if not line_sender_opts_multicast_ttl(
    __pyx_t_11 = (!line_sender_opts_multicast_ttl(__pyx_v_self->_opts, __pyx_v_c_multicast_ttl, (&__pyx_v_err)));
    if (unlikely(__pyx_t_11)) {
/* … */
    }
 11698:                     self._opts, c_multicast_ttl, &err):
+11699:                 raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11699, __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(0, 11699, __pyx_L1_error)
 11700: 
+11701:         if qwp_ws_progress is not None:
  __pyx_t_11 = (__pyx_v_qwp_ws_progress != Py_None);
  if (__pyx_t_11) {
/* … */
  }
+11702:             if not _is_qwp_ws_protocol(self._c_protocol):
    __pyx_t_11 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11702, __pyx_L1_error)
    __pyx_t_5 = (!__pyx_t_11);
    if (unlikely(__pyx_t_5)) {
/* … */
    }
+11703:                 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(0, 11703, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
+11704:                     QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 11704, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11704, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_10 = 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_10 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_qwp_ws_progress_is_only_support};
        __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__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_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11703, __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(0, 11703, __pyx_L1_error)
 11705:                     '"qwp_ws_progress" is only supported for QWP/WebSocket senders.')
+11706:             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_L31_try_end;
      __pyx_L26_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 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_L28_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_L1_error;
      __pyx_L31_try_end:;
    }
+11707:                 c_qwp_ws_progress = QwpWsProgress.parse(qwp_ws_progress).c_value
        __pyx_t_8 = NULL;
        __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QwpWsProgress); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11707, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_parse); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11707, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_10 = 1;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_1))) {
          __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);
          assert(__pyx_t_8);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_1, __pyx__function);
          __pyx_t_10 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_v_qwp_ws_progress};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11707, __pyx_L26_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_c_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11707, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_16 = ((enum line_sender_qwpws_progress)__Pyx_PyLong_As_enum__line_sender_qwpws_progress(__pyx_t_1)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 11707, __pyx_L26_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_v_c_qwp_ws_progress = __pyx_t_16;
+11708:             except ValueError:
      __pyx_t_17 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_ValueError))));
      if (__pyx_t_17) {
        __Pyx_AddTraceback("questdb._client.Sender._set_sender_fields", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_8) < 0) __PYX_ERR(0, 11708, __pyx_L28_except_error)
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_2);
        __Pyx_XGOTREF(__pyx_t_8);
+11709:                 raise QuestDBError(
        __pyx_t_9 = NULL;
        __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11709, __pyx_L28_except_error)
        __Pyx_GOTREF(__pyx_t_18);
+11710:                     QuestDBErrorCode.ConfigError,
        __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 11710, __pyx_L28_except_error)
        __Pyx_GOTREF(__pyx_t_19);
        __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 11710, __pyx_L28_except_error)
        __Pyx_GOTREF(__pyx_t_20);
        __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+11711:                     f'"qwp_ws_progress" has invalid value: {qwp_ws_progress!r}')
        __pyx_t_19 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_qwp_ws_progress), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 11711, __pyx_L28_except_error)
        __Pyx_GOTREF(__pyx_t_19);
        __pyx_t_21 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_qwp_ws_progress_has_invalid_val, __pyx_t_19); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 11711, __pyx_L28_except_error)
        __Pyx_GOTREF(__pyx_t_21);
        __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
        __pyx_t_10 = 1;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_18))) {
          __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_18);
          assert(__pyx_t_9);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_18);
          __Pyx_INCREF(__pyx_t_9);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_18, __pyx__function);
          __pyx_t_10 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_9, __pyx_t_20, __pyx_t_21};
          __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_18, __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_20); __pyx_t_20 = 0;
          __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11709, __pyx_L28_except_error)
          __Pyx_GOTREF(__pyx_t_7);
        }
        __Pyx_Raise(__pyx_t_7, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __PYX_ERR(0, 11709, __pyx_L28_except_error)
      }
      goto __pyx_L28_except_error;
+11712:             if not line_sender_opts_qwpws_progress(
    __pyx_t_5 = (!line_sender_opts_qwpws_progress(__pyx_v_self->_opts, __pyx_v_c_qwp_ws_progress, (&__pyx_v_err)));
    if (unlikely(__pyx_t_5)) {
/* … */
    }
 11713:                     self._opts, c_qwp_ws_progress, &err):
+11714:                 raise c_err_to_py(err)
      __pyx_t_8 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11714, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __PYX_ERR(0, 11714, __pyx_L1_error)
 11715: 
+11716:         if error_handler is not None and not callable(error_handler):
  __pyx_t_11 = (__pyx_v_error_handler != Py_None);
  if (__pyx_t_11) {
  } else {
    __pyx_t_5 = __pyx_t_11;
    goto __pyx_L36_bool_binop_done;
  }
  __pyx_t_11 = __Pyx_PyCallable_Check(__pyx_v_error_handler); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(0, 11716, __pyx_L1_error)
  __pyx_t_6 = (!__pyx_t_11);
  __pyx_t_5 = __pyx_t_6;
  __pyx_L36_bool_binop_done:;
  if (unlikely(__pyx_t_5)) {
/* … */
  }
+11717:             raise TypeError(
    __pyx_t_2 = NULL;
+11718:                 '"error_handler" must be callable or None, '
    __pyx_t_1 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_error_handler_must_be_callable, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11718, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_10 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_1};
      __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11717, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
    }
    __Pyx_Raise(__pyx_t_8, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __PYX_ERR(0, 11717, __pyx_L1_error)
+11719:                 f'not {_fqn(type(error_handler))}')
    __pyx_t_1 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_error_handler)))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11719, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11719, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+11720:         if error_handler is not None and not _is_qwp_ws_protocol(self._c_protocol):
  __pyx_t_6 = (__pyx_v_error_handler != Py_None);
  if (__pyx_t_6) {
  } else {
    __pyx_t_5 = __pyx_t_6;
    goto __pyx_L39_bool_binop_done;
  }
  __pyx_t_6 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_6 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11720, __pyx_L1_error)
  __pyx_t_11 = (!__pyx_t_6);
  __pyx_t_5 = __pyx_t_11;
  __pyx_L39_bool_binop_done:;
  if (unlikely(__pyx_t_5)) {
/* … */
  }
+11721:             raise QuestDBError(
    __pyx_t_1 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11721, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
+11722:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11722, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11722, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_18);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_10 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
      assert(__pyx_t_1);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
      __pyx_t_10 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_18, __pyx_mstate_global->__pyx_kp_u_error_handler_is_only_supported};
      __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11721, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
    }
    __Pyx_Raise(__pyx_t_8, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __PYX_ERR(0, 11721, __pyx_L1_error)
 11723:                 'error_handler is only supported for QWP/WebSocket senders.')
+11724:         if connection_listener is not None and not callable(
  __pyx_t_11 = (__pyx_v_connection_listener != Py_None);
  if (__pyx_t_11) {
  } else {
    __pyx_t_5 = __pyx_t_11;
    goto __pyx_L42_bool_binop_done;
  }
/* … */
  __pyx_t_11 = __Pyx_PyCallable_Check(__pyx_v_connection_listener); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(0, 11724, __pyx_L1_error)
/* … */
  __pyx_t_6 = (!__pyx_t_11);
  __pyx_t_5 = __pyx_t_6;
  __pyx_L42_bool_binop_done:;
  if (unlikely(__pyx_t_5)) {
/* … */
  }
 11725:                 connection_listener):
+11726:             raise TypeError(
    __pyx_t_2 = NULL;
+11727:                 '"connection_listener" must be callable or None, '
    __pyx_t_18 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_connection_listener_must_be_cal, __pyx_t_1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11727, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_18);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_10 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_18};
      __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11726, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
    }
    __Pyx_Raise(__pyx_t_8, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __PYX_ERR(0, 11726, __pyx_L1_error)
+11728:                 f'not {_fqn(type(connection_listener))}')
    __pyx_t_18 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_connection_listener)))); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11728, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_18);
    __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_t_18); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11728, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+11729:         if connection_listener is not None and not _is_qwp_ws_protocol(
  __pyx_t_6 = (__pyx_v_connection_listener != Py_None);
  if (__pyx_t_6) {
  } else {
    __pyx_t_5 = __pyx_t_6;
    goto __pyx_L45_bool_binop_done;
  }
/* … */
  __pyx_t_6 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_6 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11729, __pyx_L1_error)
/* … */
  __pyx_t_11 = (!__pyx_t_6);
  __pyx_t_5 = __pyx_t_11;
  __pyx_L45_bool_binop_done:;
  if (unlikely(__pyx_t_5)) {
/* … */
  }
 11730:                 self._c_protocol):
+11731:             raise QuestDBError(
    __pyx_t_18 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11731, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
+11732:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11732, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11732, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_10 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_2);
      assert(__pyx_t_18);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_18);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
      __pyx_t_10 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_18, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_connection_listener_is_only_supp};
      __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11731, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
    }
    __Pyx_Raise(__pyx_t_8, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __PYX_ERR(0, 11731, __pyx_L1_error)
 11733:                 'connection_listener is only supported for QWP/WebSocket '
 11734:                 'senders.')
 11735: 
+11736:         if _is_qwp_ws_protocol(self._c_protocol):
  __pyx_t_5 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11736, __pyx_L1_error)
  if (__pyx_t_5) {
/* … */
  }
+11737:             if error_handler is None:
    __pyx_t_5 = (__pyx_v_error_handler == Py_None);
    if (__pyx_t_5) {
/* … */
    }
+11738:                 error_handler = _default_error_handler
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_default_error_handler); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11738, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF_SET(__pyx_v_error_handler, __pyx_t_8);
      __pyx_t_8 = 0;
+11739:             self._error_handler = error_handler
    __Pyx_INCREF(__pyx_v_error_handler);
    __Pyx_GIVEREF(__pyx_v_error_handler);
    __Pyx_GOTREF(__pyx_v_self->_error_handler);
    __Pyx_DECREF(__pyx_v_self->_error_handler);
    __pyx_v_self->_error_handler = __pyx_v_error_handler;
+11740:             self._connection_listener = connection_listener
    __Pyx_INCREF(__pyx_v_connection_listener);
    __Pyx_GIVEREF(__pyx_v_connection_listener);
    __Pyx_GOTREF(__pyx_v_self->_connection_listener);
    __Pyx_DECREF(__pyx_v_self->_connection_listener);
    __pyx_v_self->_connection_listener = __pyx_v_connection_listener;
+11741:             self._dispatch_context = _new_dispatch_context(
    __pyx_t_18 = ((PyObject *)__pyx_f_7questdb_7_client__new_dispatch_context(__pyx_t_8, __pyx_t_2, __pyx_t_7)); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11741, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_18);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_GIVEREF(__pyx_t_18);
    __Pyx_GOTREF(__pyx_v_self->_dispatch_context);
    __Pyx_DECREF(__pyx_v_self->_dispatch_context);
    __pyx_v_self->_dispatch_context = __pyx_t_18;
    __pyx_t_18 = 0;
+11742:                 self._thread_owner_token,
    __pyx_t_8 = __pyx_v_self->_thread_owner_token;
    __Pyx_INCREF(__pyx_t_8);
+11743:                 self._error_handler,
    __pyx_t_2 = __pyx_v_self->_error_handler;
    __Pyx_INCREF(__pyx_t_2);
+11744:                 self._connection_listener)
    __pyx_t_7 = __pyx_v_self->_connection_listener;
    __Pyx_INCREF(__pyx_t_7);
+11745:             if not line_sender_opts_qwpws_error_handler(
    __pyx_t_5 = (!line_sender_opts_qwpws_error_handler(__pyx_v_self->_opts, __pyx_f_7questdb_7_client__sender_error_trampoline, ((void *)__pyx_v_self->_dispatch_context), (&__pyx_v_err)));
    if (unlikely(__pyx_t_5)) {
/* … */
    }
 11746:                     self._opts,
 11747:                     _sender_error_trampoline,
 11748:                     <void*>self._dispatch_context,
 11749:                     &err):
+11750:                 raise c_err_to_py(err)
      __pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11750, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_Raise(__pyx_t_18, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      __PYX_ERR(0, 11750, __pyx_L1_error)
+11751:         if connection_listener is not None:
  __pyx_t_5 = (__pyx_v_connection_listener != Py_None);
  if (__pyx_t_5) {
/* … */
  }
+11752:             if not line_sender_opts_connection_event_handler(
    __pyx_t_5 = (!line_sender_opts_connection_event_handler(__pyx_v_self->_opts, __pyx_f_7questdb_7_client__connection_event_trampoline, ((void *)__pyx_v_self->_dispatch_context), ((size_t)__pyx_t_10), (&__pyx_v_err)));
    if (unlikely(__pyx_t_5)) {
/* … */
    }
 11753:                     self._opts,
 11754:                     _connection_event_trampoline,
 11755:                     <void*>self._dispatch_context,
+11756:                     <size_t>(connection_event_inbox_capacity or 0),
    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_connection_event_inbox_capacity); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 11756, __pyx_L1_error)
    if (!__pyx_t_5) {
    } else {
      __pyx_t_22 = __Pyx_PyLong_As_size_t(__pyx_v_connection_event_inbox_capacity); if (unlikely((__pyx_t_22 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 11756, __pyx_L1_error)
      __pyx_t_10 = __pyx_t_22;
      goto __pyx_L52_bool_binop_done;
    }
    __pyx_t_10 = 0;
    __pyx_L52_bool_binop_done:;
 11757:                     &err):
+11758:                 raise c_err_to_py(err)
      __pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11758, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_Raise(__pyx_t_18, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      __PYX_ERR(0, 11758, __pyx_L1_error)
 11759: 
+11760:         if username is not None:
  __pyx_t_5 = (__pyx_v_username != ((PyObject*)Py_None));
  if (__pyx_t_5) {
/* … */
  }
+11761:             str_to_utf8(b, <PyObject*>username, &c_username)
    __pyx_t_4 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_username), (&__pyx_v_c_username)); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11761, __pyx_L1_error)
+11762:             if not line_sender_opts_username(self._opts, c_username, &err):
    __pyx_t_5 = (!line_sender_opts_username(__pyx_v_self->_opts, __pyx_v_c_username, (&__pyx_v_err)));
    if (unlikely(__pyx_t_5)) {
/* … */
    }
+11763:                 raise c_err_to_py(err)
      __pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11763, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_Raise(__pyx_t_18, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      __PYX_ERR(0, 11763, __pyx_L1_error)
 11764: 
+11765:         if password is not None:
  __pyx_t_5 = (__pyx_v_password != ((PyObject*)Py_None));
  if (__pyx_t_5) {
/* … */
  }
+11766:             str_to_utf8(b, <PyObject*>password, &c_password)
    __pyx_t_4 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_password), (&__pyx_v_c_password)); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11766, __pyx_L1_error)
+11767:             if not line_sender_opts_password(self._opts, c_password, &err):
    __pyx_t_5 = (!line_sender_opts_password(__pyx_v_self->_opts, __pyx_v_c_password, (&__pyx_v_err)));
    if (unlikely(__pyx_t_5)) {
/* … */
    }
+11768:                 raise c_err_to_py(err)
      __pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11768, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_Raise(__pyx_t_18, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      __PYX_ERR(0, 11768, __pyx_L1_error)
 11769: 
+11770:         if token is not None:
  __pyx_t_5 = (__pyx_v_token != ((PyObject*)Py_None));
  if (__pyx_t_5) {
/* … */
  }
+11771:             str_to_utf8(b, <PyObject*>token, &c_token)
    __pyx_t_4 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_token), (&__pyx_v_c_token)); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11771, __pyx_L1_error)
+11772:             if not line_sender_opts_token(self._opts, c_token, &err):
    __pyx_t_5 = (!line_sender_opts_token(__pyx_v_self->_opts, __pyx_v_c_token, (&__pyx_v_err)));
    if (unlikely(__pyx_t_5)) {
/* … */
    }
+11773:                 raise c_err_to_py(err)
      __pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11773, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_Raise(__pyx_t_18, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      __PYX_ERR(0, 11773, __pyx_L1_error)
 11774: 
+11775:         if oidc_auth is not None:
  __pyx_t_5 = (__pyx_v_oidc_auth != Py_None);
  if (__pyx_t_5) {
/* … */
  }
+11776:             if not isinstance(oidc_auth, OidcDeviceAuth):
    __pyx_t_5 = __Pyx_TypeCheck(__pyx_v_oidc_auth, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_OidcDeviceAuth); 
    __pyx_t_11 = (!__pyx_t_5);
    if (unlikely(__pyx_t_11)) {
/* … */
    }
+11777:                 raise _ConfigTypeError(
      __pyx_t_7 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ConfigTypeError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11777, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
+11778:                     '"oidc_auth" must be an OidcDeviceAuth or None, '
      __pyx_t_8 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_oidc_auth_must_be_an_OidcDevice, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11778, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_10 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2);
        assert(__pyx_t_7);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
        __pyx_t_10 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_8};
        __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__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_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11777, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_18);
      }
      __Pyx_Raise(__pyx_t_18, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      __PYX_ERR(0, 11777, __pyx_L1_error)
+11779:                     f'not {_fqn(type(oidc_auth))}')
      __pyx_t_8 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_oidc_auth)))); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11779, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11779, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+11780:             _oidc_require_native_token(oidc_auth)
    __pyx_t_4 = __pyx_f_7questdb_7_client__oidc_require_native_token(__pyx_v_oidc_auth); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11780, __pyx_L1_error)
 11781:             # Distinguish the two states the way `_require_open` does: a NULL
 11782:             # handle is a provider whose construction never completed, which
 11783:             # "is closed" misdescribes and sends the caller looking for a
 11784:             # close() they never made.
+11785:             if (<OidcDeviceAuth>oidc_auth)._raw == NULL:
    __pyx_t_11 = (((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_oidc_auth)->_raw == NULL);
    if (unlikely(__pyx_t_11)) {
/* … */
    }
+11786:                 raise _ConfigValueError('"oidc_auth" is not initialized')
      __pyx_t_2 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_ConfigValueError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11786, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_10 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(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_10 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_oidc_auth_is_not_initialized};
        __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__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_18)) __PYX_ERR(0, 11786, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_18);
      }
      __Pyx_Raise(__pyx_t_18, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      __PYX_ERR(0, 11786, __pyx_L1_error)
+11787:             if (<OidcDeviceAuth>oidc_auth)._closed:
    if (((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_oidc_auth)->_closed) {
/* … */
    }
+11788:                 _raise_oidc_auth_closed()
      __pyx_t_17 = __pyx_f_7questdb_7_client__raise_oidc_auth_closed(); if (unlikely(__pyx_t_17 == ((int)-1))) __PYX_ERR(0, 11788, __pyx_L1_error)
 11789:             # Reject the conflict here, in terms of the parameters the caller
 11790:             # actually wrote. Native enforces it too, but reports the internal
 11791:             # config key it knows -- "qwp_ws_token_provider" or
 11792:             # "http_token_provider" -- which exists in no public API, so a user
 11793:             # who passed oidc_auth= and token= was told about a symbol they
 11794:             # cannot find.
+11795:             _conflicting = [
    { /* enter inner scope */
      __pyx_t_18 = PyList_New(0); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11795, __pyx_L66_error)
      __Pyx_GOTREF(__pyx_t_18);
+11796:                 name for name, value in (
      __pyx_t_7 = __pyx_t_1; __Pyx_INCREF(__pyx_t_7);
      __pyx_t_23 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      for (;;) {
        if (__pyx_t_23 >= 3) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_23));
        #else
        __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_7, __pyx_t_23);
        #endif
        ++__pyx_t_23;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11796, __pyx_L66_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(0, 11796, __pyx_L66_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_8 = PyTuple_GET_ITEM(sequence, 1);
          __Pyx_INCREF(__pyx_t_8);
          #else
          __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11796, __pyx_L66_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_8 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11796, __pyx_L66_error)
          __Pyx_GOTREF(__pyx_t_8);
          #endif
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        } else {
          __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 11796, __pyx_L66_error)
        }
        __Pyx_XDECREF_SET(__pyx_9genexpr31__pyx_v_name, __pyx_t_2);
        __pyx_t_2 = 0;
        __Pyx_XDECREF_SET(__pyx_9genexpr31__pyx_v_value, __pyx_t_8);
        __pyx_t_8 = 0;
/* … */
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_18, (PyObject*)__pyx_9genexpr31__pyx_v_name))) __PYX_ERR(0, 11795, __pyx_L66_error)
/* … */
      }
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_9genexpr31__pyx_v_name); __pyx_9genexpr31__pyx_v_name = 0;
      __Pyx_XDECREF(__pyx_9genexpr31__pyx_v_value); __pyx_9genexpr31__pyx_v_value = 0;
      goto __pyx_L71_exit_scope;
      __pyx_L66_error:;
      __Pyx_XDECREF(__pyx_9genexpr31__pyx_v_name); __pyx_9genexpr31__pyx_v_name = 0;
      __Pyx_XDECREF(__pyx_9genexpr31__pyx_v_value); __pyx_9genexpr31__pyx_v_value = 0;
      goto __pyx_L1_error;
      __pyx_L71_exit_scope:;
    } /* exit inner scope */
    __pyx_v__conflicting = ((PyObject*)__pyx_t_18);
    __pyx_t_18 = 0;
+11797:                     ('token', token),
      __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11797, __pyx_L66_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_token);
      __Pyx_GIVEREF(__pyx_mstate_global->__pyx_n_u_token);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_mstate_global->__pyx_n_u_token) != (0)) __PYX_ERR(0, 11797, __pyx_L66_error);
      __Pyx_INCREF(__pyx_v_token);
      __Pyx_GIVEREF(__pyx_v_token);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_token) != (0)) __PYX_ERR(0, 11797, __pyx_L66_error);
/* … */
      __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11797, __pyx_L66_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(0, 11797, __pyx_L66_error);
      __Pyx_GIVEREF(__pyx_t_2);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2) != (0)) __PYX_ERR(0, 11797, __pyx_L66_error);
      __Pyx_GIVEREF(__pyx_t_7);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_7) != (0)) __PYX_ERR(0, 11797, __pyx_L66_error);
      __pyx_t_8 = 0;
      __pyx_t_2 = 0;
      __pyx_t_7 = 0;
+11798:                     ('username', username),
      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11798, __pyx_L66_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_username);
      __Pyx_GIVEREF(__pyx_mstate_global->__pyx_n_u_username);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_mstate_global->__pyx_n_u_username) != (0)) __PYX_ERR(0, 11798, __pyx_L66_error);
      __Pyx_INCREF(__pyx_v_username);
      __Pyx_GIVEREF(__pyx_v_username);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_username) != (0)) __PYX_ERR(0, 11798, __pyx_L66_error);
+11799:                     ('password', password))
      __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11799, __pyx_L66_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_password);
      __Pyx_GIVEREF(__pyx_mstate_global->__pyx_n_u_password);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_mstate_global->__pyx_n_u_password) != (0)) __PYX_ERR(0, 11799, __pyx_L66_error);
      __Pyx_INCREF(__pyx_v_password);
      __Pyx_GIVEREF(__pyx_v_password);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_password) != (0)) __PYX_ERR(0, 11799, __pyx_L66_error);
+11800:                 if value is not None]
        __pyx_t_11 = (__pyx_9genexpr31__pyx_v_value != Py_None);
        if (__pyx_t_11) {
/* … */
        }
+11801:             if _conflicting:
    {
      Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v__conflicting);
      if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 11801, __pyx_L1_error)
      __pyx_t_11 = (__pyx_temp != 0);
    }

    if (unlikely(__pyx_t_11)) {
/* … */
    }
+11802:                 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(0, 11802, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
+11803:                     QuestDBErrorCode.ConfigError,
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11803, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11803, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 11804:                     '"oidc_auth" is mutually exclusive with '
+11805:                     + ', '.join(f'"{name}"' for name in _conflicting)
static PyObject *__pyx_pf_7questdb_7_client_6Sender_18_set_sender_fields_genexpr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
  struct __pyx_obj_7questdb_7_client___pyx_scope_struct_15_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_15_genexpr *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_15_genexpr(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_15_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_15_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 11805, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_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_6Sender_18_set_sender_fields_2generator11, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[11]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_Sender__set_sender_fields_locals, __pyx_mstate_global->__pyx_n_u_questdb__client); if (unlikely(!gen)) __PYX_ERR(0, 11805, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client.Sender._set_sender_fields.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_6Sender_18_set_sender_fields_2generator11(__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(0, 11805, __pyx_L1_error)
  __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 11805, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 11805, __pyx_L1_error) }
  __pyx_t_1 = __pyx_cur_scope->__pyx_genexpr_arg_0; __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = 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(0, 11805, __pyx_L1_error)
      #endif
      if (__pyx_t_2 >= __pyx_temp) break;
    }
    __pyx_t_3 = __Pyx_PyList_GetItemRefFast(__pyx_t_1, __pyx_t_2, __Pyx_ReferenceSharing_OwnStrongReference);
    ++__pyx_t_2;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11805, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_name);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_name, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_name, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11805, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4[0] = __pyx_mstate_global->__pyx_kp_u__26;
    __pyx_t_4[1] = __pyx_t_3;
    __pyx_t_4[2] = __pyx_mstate_global->__pyx_kp_u__26;
    __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, 1 * 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3));
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 11805, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(__Pyx_ListComp_Append(__pyx_r, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 11805, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  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;
}
static PyObject *__pyx_gb_7questdb_7_client_6Sender_18_set_sender_fields_5generator12(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
      __pyx_t_8 = __pyx_pf_7questdb_7_client_6Sender_18_set_sender_fields_genexpr(NULL, __pyx_v__conflicting); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11805, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_21 = __Pyx_Generator_GetInlinedResult(__pyx_t_8); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 11805, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_21);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__27, __pyx_t_21); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11805, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
      __pyx_t_21 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_oidc_auth_is_mutually_exclusive, __pyx_t_8); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 11805, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_21);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_15_genexpr {
  PyObject_HEAD
  PyObject *__pyx_genexpr_arg_0;
  PyObject *__pyx_v_name;
};

+11806:                     + '. An OIDC provider supplies the credential itself; '
      __pyx_t_8 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_21, __pyx_mstate_global->__pyx_kp_u_An_OIDC_provider_supplies_the_c); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11806, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
      __pyx_t_10 = 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_10 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_2, __pyx_t_8};
        __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __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_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11802, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_18);
      }
      __Pyx_Raise(__pyx_t_18, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      __PYX_ERR(0, 11802, __pyx_L1_error)
 11807:                     'remove the fixed credential, or drop "oidc_auth" to keep '
 11808:                     'using it.')
+11809:             if not line_sender_opts_oidc_auth(
    __pyx_t_11 = (!line_sender_opts_oidc_auth(__pyx_v_self->_opts, ((struct __pyx_obj_7questdb_7_client_OidcDeviceAuth *)__pyx_v_oidc_auth)->_raw, (&__pyx_v_err)));
    if (unlikely(__pyx_t_11)) {
/* … */
    }
 11810:                     self._opts, (<OidcDeviceAuth>oidc_auth)._raw, &err):
+11811:                 raise c_err_to_py(err)
      __pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11811, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_Raise(__pyx_t_18, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      __PYX_ERR(0, 11811, __pyx_L1_error)
+11812:             self._oidc_auth = oidc_auth
    __Pyx_INCREF(__pyx_v_oidc_auth);
    __Pyx_GIVEREF(__pyx_v_oidc_auth);
    __Pyx_GOTREF(__pyx_v_self->_oidc_auth);
    __Pyx_DECREF(__pyx_v_self->_oidc_auth);
    __pyx_v_self->_oidc_auth = __pyx_v_oidc_auth;
 11813: 
+11814:         if bearer_token_provider is not None:
  __pyx_t_11 = (__pyx_v_bearer_token_provider != Py_None);
  if (__pyx_t_11) {
/* … */
  }
+11815:             if oidc_auth is not None:
    __pyx_t_11 = (__pyx_v_oidc_auth != Py_None);
    if (unlikely(__pyx_t_11)) {
/* … */
    }
+11816:                 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(0, 11816, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
+11817:                     QuestDBErrorCode.ConfigError,
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11817, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11817, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_10 = 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_10 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_bearer_token_provider_and_oidc};
        __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__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_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11816, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_18);
      }
      __Pyx_Raise(__pyx_t_18, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      __PYX_ERR(0, 11816, __pyx_L1_error)
 11818:                     '"bearer_token_provider" and "oidc_auth" are mutually '
 11819:                     'exclusive: attach one token provider.')
+11820:             _conflicting = [
    { /* enter inner scope */
      __pyx_t_18 = PyList_New(0); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11820, __pyx_L78_error)
      __Pyx_GOTREF(__pyx_t_18);
+11821:                 name for name, value in (
      __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1);
      __pyx_t_23 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      for (;;) {
        if (__pyx_t_23 >= 3) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_2 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_23));
        #else
        __pyx_t_2 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_23);
        #endif
        ++__pyx_t_23;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11821, __pyx_L78_error)
        __Pyx_GOTREF(__pyx_t_2);
        if (likely(__pyx_t_2 != Py_None)) {
          PyObject* sequence = __pyx_t_2;
          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(0, 11821, __pyx_L78_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(0, 11821, __pyx_L78_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_8 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11821, __pyx_L78_error)
          __Pyx_GOTREF(__pyx_t_8);
          #endif
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        } else {
          __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 11821, __pyx_L78_error)
        }
        __Pyx_XDECREF_SET(__pyx_9genexpr33__pyx_v_name, __pyx_t_7);
        __pyx_t_7 = 0;
        __Pyx_XDECREF_SET(__pyx_9genexpr33__pyx_v_value, __pyx_t_8);
        __pyx_t_8 = 0;
/* … */
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_18, (PyObject*)__pyx_9genexpr33__pyx_v_name))) __PYX_ERR(0, 11820, __pyx_L78_error)
/* … */
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_9genexpr33__pyx_v_name); __pyx_9genexpr33__pyx_v_name = 0;
      __Pyx_XDECREF(__pyx_9genexpr33__pyx_v_value); __pyx_9genexpr33__pyx_v_value = 0;
      goto __pyx_L83_exit_scope;
      __pyx_L78_error:;
      __Pyx_XDECREF(__pyx_9genexpr33__pyx_v_name); __pyx_9genexpr33__pyx_v_name = 0;
      __Pyx_XDECREF(__pyx_9genexpr33__pyx_v_value); __pyx_9genexpr33__pyx_v_value = 0;
      goto __pyx_L1_error;
      __pyx_L83_exit_scope:;
    } /* exit inner scope */
    __Pyx_XDECREF_SET(__pyx_v__conflicting, ((PyObject*)__pyx_t_18));
    __pyx_t_18 = 0;
+11822:                     ('token', token),
      __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11822, __pyx_L78_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_token);
      __Pyx_GIVEREF(__pyx_mstate_global->__pyx_n_u_token);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_mstate_global->__pyx_n_u_token) != (0)) __PYX_ERR(0, 11822, __pyx_L78_error);
      __Pyx_INCREF(__pyx_v_token);
      __Pyx_GIVEREF(__pyx_v_token);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_token) != (0)) __PYX_ERR(0, 11822, __pyx_L78_error);
/* … */
      __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11822, __pyx_L78_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_8);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8) != (0)) __PYX_ERR(0, 11822, __pyx_L78_error);
      __Pyx_GIVEREF(__pyx_t_7);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_7) != (0)) __PYX_ERR(0, 11822, __pyx_L78_error);
      __Pyx_GIVEREF(__pyx_t_1);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_1) != (0)) __PYX_ERR(0, 11822, __pyx_L78_error);
      __pyx_t_8 = 0;
      __pyx_t_7 = 0;
      __pyx_t_1 = 0;
+11823:                     ('username', username),
      __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11823, __pyx_L78_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_username);
      __Pyx_GIVEREF(__pyx_mstate_global->__pyx_n_u_username);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_mstate_global->__pyx_n_u_username) != (0)) __PYX_ERR(0, 11823, __pyx_L78_error);
      __Pyx_INCREF(__pyx_v_username);
      __Pyx_GIVEREF(__pyx_v_username);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_username) != (0)) __PYX_ERR(0, 11823, __pyx_L78_error);
+11824:                     ('password', password))
      __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11824, __pyx_L78_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_password);
      __Pyx_GIVEREF(__pyx_mstate_global->__pyx_n_u_password);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_mstate_global->__pyx_n_u_password) != (0)) __PYX_ERR(0, 11824, __pyx_L78_error);
      __Pyx_INCREF(__pyx_v_password);
      __Pyx_GIVEREF(__pyx_v_password);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_password) != (0)) __PYX_ERR(0, 11824, __pyx_L78_error);
+11825:                 if value is not None]
        __pyx_t_11 = (__pyx_9genexpr33__pyx_v_value != Py_None);
        if (__pyx_t_11) {
/* … */
        }
+11826:             if _conflicting:
    {
      Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v__conflicting);
      if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 11826, __pyx_L1_error)
      __pyx_t_11 = (__pyx_temp != 0);
    }

    if (unlikely(__pyx_t_11)) {
/* … */
    }
+11827:                 raise QuestDBError(
      __pyx_t_1 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11827, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
+11828:                     QuestDBErrorCode.ConfigError,
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11828, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11828, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 11829:                     '"bearer_token_provider" is mutually exclusive with '
+11830:                     + ', '.join(f'"{name}"' for name in _conflicting)
static PyObject *__pyx_pf_7questdb_7_client_6Sender_18_set_sender_fields_3genexpr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
  struct __pyx_obj_7questdb_7_client___pyx_scope_struct_16_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_16_genexpr *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_16_genexpr(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_16_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_16_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 11830, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_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_6Sender_18_set_sender_fields_5generator12, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[12]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_Sender__set_sender_fields_locals, __pyx_mstate_global->__pyx_n_u_questdb__client); if (unlikely(!gen)) __PYX_ERR(0, 11830, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client.Sender._set_sender_fields.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_6Sender_18_set_sender_fields_5generator12(__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(0, 11830, __pyx_L1_error)
  __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 11830, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 11830, __pyx_L1_error) }
  __pyx_t_1 = __pyx_cur_scope->__pyx_genexpr_arg_0; __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = 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(0, 11830, __pyx_L1_error)
      #endif
      if (__pyx_t_2 >= __pyx_temp) break;
    }
    __pyx_t_3 = __Pyx_PyList_GetItemRefFast(__pyx_t_1, __pyx_t_2, __Pyx_ReferenceSharing_OwnStrongReference);
    ++__pyx_t_2;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11830, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_name);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_name, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_name, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11830, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4[0] = __pyx_mstate_global->__pyx_kp_u__26;
    __pyx_t_4[1] = __pyx_t_3;
    __pyx_t_4[2] = __pyx_mstate_global->__pyx_kp_u__26;
    __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, 1 * 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3));
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 11830, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(__Pyx_ListComp_Append(__pyx_r, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 11830, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  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 = __pyx_pf_7questdb_7_client_6Sender_18_set_sender_fields_3genexpr(NULL, __pyx_v__conflicting); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11830, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_21 = __Pyx_Generator_GetInlinedResult(__pyx_t_8); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 11830, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_21);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__27, __pyx_t_21); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11830, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
      __pyx_t_21 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_bearer_token_provider_is_mutual, __pyx_t_8); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 11830, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_21);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_16_genexpr {
  PyObject_HEAD
  PyObject *__pyx_genexpr_arg_0;
  PyObject *__pyx_v_name;
};

+11831:                     + '. A token provider supplies the credential itself; '
      __pyx_t_8 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_21, __pyx_mstate_global->__pyx_kp_u_A_token_provider_supplies_the_c); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11831, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
      __pyx_t_10 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
        assert(__pyx_t_1);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
        __pyx_t_10 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_7, __pyx_t_8};
        __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__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_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11827, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_18);
      }
      __Pyx_Raise(__pyx_t_18, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      __PYX_ERR(0, 11827, __pyx_L1_error)
 11832:                     'remove the fixed credential, or drop '
 11833:                     '"bearer_token_provider" to keep using it.')
+11834:             _holder = _tp_resolve_bearer_token_provider(bearer_token_provider)
    __pyx_t_18 = __pyx_f_7questdb_7_client__tp_resolve_bearer_token_provider(__pyx_v_bearer_token_provider); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11834, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_18);
    __pyx_v__holder = __pyx_t_18;
    __pyx_t_18 = 0;
+11835:             if not line_sender_opts_token_provider(
    __pyx_t_11 = (!line_sender_opts_token_provider(__pyx_v_self->_opts, __pyx_t_24, (&__pyx_v_err)));
    if (unlikely(__pyx_t_11)) {
/* … */
    }
+11836:                     self._opts, _tp_holder_raw(_holder), &err):
    __pyx_t_24 = __pyx_f_7questdb_7_client__tp_holder_raw(__pyx_v__holder); if (unlikely(__pyx_t_24 == ((void *)NULL))) __PYX_ERR(0, 11836, __pyx_L1_error)
+11837:                 raise c_err_to_py(err)
      __pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11837, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_Raise(__pyx_t_18, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      __PYX_ERR(0, 11837, __pyx_L1_error)
+11838:             _sender_hold_bearer(self, _holder)
    __pyx_t_4 = __pyx_f_7questdb_7_client__sender_hold_bearer(__pyx_v_self, __pyx_v__holder); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11838, __pyx_L1_error)
 11839: 
+11840:         if oidc_auth is not None or bearer_token_provider is not None:
  __pyx_t_5 = (__pyx_v_oidc_auth != Py_None);
  if (!__pyx_t_5) {
  } else {
    __pyx_t_11 = __pyx_t_5;
    goto __pyx_L87_bool_binop_done;
  }
  __pyx_t_5 = (__pyx_v_bearer_token_provider != Py_None);
  __pyx_t_11 = __pyx_t_5;
  __pyx_L87_bool_binop_done:;
  if (__pyx_t_11) {
/* … */
  }
+11841:             _tp_warn_if_cleartext(protocol)
    __pyx_t_2 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_tp_warn_if_cleartext); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 11841, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_10 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(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_10 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_protocol};
      __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__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_18)) __PYX_ERR(0, 11841, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
    }
    __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 11842: 
+11843:         if token_x is not None:
  __pyx_t_11 = (__pyx_v_token_x != ((PyObject*)Py_None));
  if (__pyx_t_11) {
/* … */
  }
+11844:             str_to_utf8(b, <PyObject*>token_x, &c_token_x)
    __pyx_t_4 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_token_x), (&__pyx_v_c_token_x)); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11844, __pyx_L1_error)
+11845:             if not line_sender_opts_token_x(self._opts, c_token_x, &err):
    __pyx_t_11 = (!line_sender_opts_token_x(__pyx_v_self->_opts, __pyx_v_c_token_x, (&__pyx_v_err)));
    if (unlikely(__pyx_t_11)) {
/* … */
    }
+11846:                 raise c_err_to_py(err)
      __pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11846, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_Raise(__pyx_t_18, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      __PYX_ERR(0, 11846, __pyx_L1_error)
 11847: 
+11848:         if token_y is not None:
  __pyx_t_11 = (__pyx_v_token_y != ((PyObject*)Py_None));
  if (__pyx_t_11) {
/* … */
  }
+11849:             str_to_utf8(b, <PyObject*>token_y, &c_token_y)
    __pyx_t_4 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_token_y), (&__pyx_v_c_token_y)); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11849, __pyx_L1_error)
+11850:             if not line_sender_opts_token_y(self._opts, c_token_y, &err):
    __pyx_t_11 = (!line_sender_opts_token_y(__pyx_v_self->_opts, __pyx_v_c_token_y, (&__pyx_v_err)));
    if (unlikely(__pyx_t_11)) {
/* … */
    }
+11851:                 raise c_err_to_py(err)
      __pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11851, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_Raise(__pyx_t_18, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      __PYX_ERR(0, 11851, __pyx_L1_error)
 11852: 
+11853:         if protocol_version is not None:
  __pyx_t_11 = (__pyx_v_protocol_version != Py_None);
  if (__pyx_t_11) {
/* … */
  }
+11854:             if protocol_version == 'auto':
    __pyx_t_11 = (__Pyx_PyUnicode_Equals(__pyx_v_protocol_version, __pyx_mstate_global->__pyx_n_u_auto, Py_EQ)); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 11854, __pyx_L1_error)
    if (__pyx_t_11) {
      goto __pyx_L94;
    }
 11855:                 pass
+11856:             elif (protocol_version == 1) or (protocol_version == '1'):
    __pyx_t_5 = (__Pyx_PyLong_BoolEqObjC(__pyx_v_protocol_version, __pyx_mstate_global->__pyx_int_1, 1, 0)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 11856, __pyx_L1_error)
    if (!__pyx_t_5) {
    } else {
      __pyx_t_11 = __pyx_t_5;
      goto __pyx_L95_bool_binop_done;
    }
    __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_v_protocol_version, __pyx_mstate_global->__pyx_kp_u_1, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 11856, __pyx_L1_error)
    __pyx_t_11 = __pyx_t_5;
    __pyx_L95_bool_binop_done:;
    if (__pyx_t_11) {
/* … */
      goto __pyx_L94;
    }
+11857:                 if not line_sender_opts_protocol_version(
      __pyx_t_11 = (!line_sender_opts_protocol_version(__pyx_v_self->_opts, line_sender_protocol_version_1, (&__pyx_v_err)));
      if (unlikely(__pyx_t_11)) {
/* … */
      }
 11858:                         self._opts, line_sender_protocol_version_1, &err):
+11859:                     raise c_err_to_py(err)
        __pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11859, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_18);
        __Pyx_Raise(__pyx_t_18, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        __PYX_ERR(0, 11859, __pyx_L1_error)
+11860:             elif (protocol_version == 2) or (protocol_version == '2'):
    __pyx_t_5 = (__Pyx_PyLong_BoolEqObjC(__pyx_v_protocol_version, __pyx_mstate_global->__pyx_int_2, 2, 0)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 11860, __pyx_L1_error)
    if (!__pyx_t_5) {
    } else {
      __pyx_t_11 = __pyx_t_5;
      goto __pyx_L98_bool_binop_done;
    }
    __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_v_protocol_version, __pyx_mstate_global->__pyx_kp_u_2, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 11860, __pyx_L1_error)
    __pyx_t_11 = __pyx_t_5;
    __pyx_L98_bool_binop_done:;
    if (__pyx_t_11) {
/* … */
      goto __pyx_L94;
    }
+11861:                 if not line_sender_opts_protocol_version(
      __pyx_t_11 = (!line_sender_opts_protocol_version(__pyx_v_self->_opts, line_sender_protocol_version_2, (&__pyx_v_err)));
      if (unlikely(__pyx_t_11)) {
/* … */
      }
 11862:                         self._opts, line_sender_protocol_version_2, &err):
+11863:                     raise c_err_to_py(err)
        __pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11863, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_18);
        __Pyx_Raise(__pyx_t_18, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        __PYX_ERR(0, 11863, __pyx_L1_error)
+11864:             elif (protocol_version == 3) or (protocol_version == '3'):
    __pyx_t_5 = (__Pyx_PyLong_BoolEqObjC(__pyx_v_protocol_version, __pyx_mstate_global->__pyx_int_3, 3, 0)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 11864, __pyx_L1_error)
    if (!__pyx_t_5) {
    } else {
      __pyx_t_11 = __pyx_t_5;
      goto __pyx_L101_bool_binop_done;
    }
    __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_v_protocol_version, __pyx_mstate_global->__pyx_kp_u_3, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 11864, __pyx_L1_error)
    __pyx_t_11 = __pyx_t_5;
    __pyx_L101_bool_binop_done:;
    if (likely(__pyx_t_11)) {
/* … */
      goto __pyx_L94;
    }
+11865:                 if not line_sender_opts_protocol_version(
      __pyx_t_11 = (!line_sender_opts_protocol_version(__pyx_v_self->_opts, line_sender_protocol_version_3, (&__pyx_v_err)));
      if (unlikely(__pyx_t_11)) {
/* … */
      }
 11866:                         self._opts, line_sender_protocol_version_3, &err):
+11867:                     raise c_err_to_py(err)
        __pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11867, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_18);
        __Pyx_Raise(__pyx_t_18, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        __PYX_ERR(0, 11867, __pyx_L1_error)
 11868:             else:
+11869:                 raise QuestDBError(
    /*else*/ {
      __pyx_t_8 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11869, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
+11870:                     QuestDBErrorCode.ConfigError,
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11870, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11870, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+11871:                     '"protocol_version" must be None, "auto", 1-3' +
      __pyx_t_7 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_protocol_version_must_be_None_a, __pyx_t_21); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11871, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
      __pyx_t_10 = 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_10 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_1, __pyx_t_7};
        __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__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_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11869, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_18);
      }
      __Pyx_Raise(__pyx_t_18, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      __PYX_ERR(0, 11869, __pyx_L1_error)
    }
    __pyx_L94:;
+11872:                     f' not {protocol_version!r}')
      __pyx_t_7 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_protocol_version), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11872, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_21 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_not_2, __pyx_t_7); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 11872, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_21);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 11873: 
+11874:         if auth_timeout is not None:
  __pyx_t_11 = (__pyx_v_auth_timeout != Py_None);
  if (__pyx_t_11) {
/* … */
  }
+11875:             if _is_int_not_bool(auth_timeout):
    __pyx_t_11 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_auth_timeout); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11875, __pyx_L1_error)
    if (__pyx_t_11) {
/* … */
      goto __pyx_L105;
    }
+11876:                 c_auth_timeout = auth_timeout
      __pyx_t_25 = __Pyx_PyLong_As_uint64_t(__pyx_v_auth_timeout); if (unlikely((__pyx_t_25 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 11876, __pyx_L1_error)
      __pyx_v_c_auth_timeout = __pyx_t_25;
+11877:             elif isinstance(auth_timeout, cp_timedelta):
    __pyx_t_11 = __Pyx_TypeCheck(__pyx_v_auth_timeout, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta); 
    if (likely(__pyx_t_11)) {
/* … */
      goto __pyx_L105;
    }
+11878:                 c_auth_timeout = _timedelta_to_millis(auth_timeout)
      if (!(likely(((__pyx_v_auth_timeout) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_auth_timeout, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta))))) __PYX_ERR(0, 11878, __pyx_L1_error)
      __pyx_t_25 = __pyx_f_7questdb_7_client__timedelta_to_millis(((PyDateTime_Delta *)__pyx_v_auth_timeout)); if (unlikely(__pyx_t_25 == ((uint64_t)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 11878, __pyx_L1_error)
      __pyx_v_c_auth_timeout = __pyx_t_25;
 11879:             else:
+11880:                 raise TypeError(
    /*else*/ {
      __pyx_t_2 = NULL;
+11881:                     '"auth_timeout" must be an int or a timedelta, '
      __pyx_t_7 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_auth_timeout_must_be_an_int_or, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11881, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_10 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_7};
        __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11880, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_18);
      }
      __Pyx_Raise(__pyx_t_18, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      __PYX_ERR(0, 11880, __pyx_L1_error)
    }
    __pyx_L105:;
+11882:                     f'not {_fqn(type(auth_timeout))}')
      __pyx_t_7 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_auth_timeout)))); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11882, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11882, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+11883:             if not line_sender_opts_auth_timeout(self._opts, c_auth_timeout, &err):
    __pyx_t_11 = (!line_sender_opts_auth_timeout(__pyx_v_self->_opts, __pyx_v_c_auth_timeout, (&__pyx_v_err)));
    if (unlikely(__pyx_t_11)) {
/* … */
    }
+11884:                 raise c_err_to_py(err)
      __pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11884, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_Raise(__pyx_t_18, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      __PYX_ERR(0, 11884, __pyx_L1_error)
 11885: 
+11886:         if tls_verify is not None:
  __pyx_t_11 = (__pyx_v_tls_verify != Py_None);
  if (__pyx_t_11) {
/* … */
  }
+11887:             if (tls_verify is True) or (tls_verify == 'on'):
    __pyx_t_5 = (__pyx_v_tls_verify == Py_True);
    if (!__pyx_t_5) {
    } else {
      __pyx_t_11 = __pyx_t_5;
      goto __pyx_L109_bool_binop_done;
    }
    __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_v_tls_verify, __pyx_mstate_global->__pyx_n_u_on, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 11887, __pyx_L1_error)
    __pyx_t_11 = __pyx_t_5;
    __pyx_L109_bool_binop_done:;
    if (__pyx_t_11) {
/* … */
      goto __pyx_L108;
    }
+11888:                 c_tls_verify = True
      __pyx_v_c_tls_verify = 1;
+11889:             elif (tls_verify is False) or (tls_verify == 'unsafe_off'):
    __pyx_t_5 = (__pyx_v_tls_verify == Py_False);
    if (!__pyx_t_5) {
    } else {
      __pyx_t_11 = __pyx_t_5;
      goto __pyx_L111_bool_binop_done;
    }
    __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_v_tls_verify, __pyx_mstate_global->__pyx_n_u_unsafe_off, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 11889, __pyx_L1_error)
    __pyx_t_11 = __pyx_t_5;
    __pyx_L111_bool_binop_done:;
    if (likely(__pyx_t_11)) {
/* … */
      goto __pyx_L108;
    }
+11890:                 c_tls_verify = False
      __pyx_v_c_tls_verify = 0;
 11891:             else:
+11892:                 raise ValueError(
    /*else*/ {
      __pyx_t_7 = NULL;
+11893:                     '"tls_verify" must be a bool, "on" or "unsafe_off", '
      __pyx_t_1 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_tls_verify_must_be_a_bool_on_or, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11893, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_10 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_1};
        __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__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_18)) __PYX_ERR(0, 11892, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_18);
      }
      __Pyx_Raise(__pyx_t_18, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      __PYX_ERR(0, 11892, __pyx_L1_error)
    }
    __pyx_L108:;
+11894:                     f'not {tls_verify!r}')
      __pyx_t_2 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_tls_verify), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11894, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
+11895:             if not line_sender_opts_tls_verify(self._opts, c_tls_verify, &err):
    __pyx_t_11 = (!line_sender_opts_tls_verify(__pyx_v_self->_opts, __pyx_v_c_tls_verify, (&__pyx_v_err)));
    if (unlikely(__pyx_t_11)) {
/* … */
    }
+11896:                 raise c_err_to_py(err)
      __pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11896, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_Raise(__pyx_t_18, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      __PYX_ERR(0, 11896, __pyx_L1_error)
 11897: 
+11898:         if tls_roots is not None:
  __pyx_t_11 = (__pyx_v_tls_roots != Py_None);
  if (__pyx_t_11) {
/* … */
  }
+11899:             tls_roots = str(tls_roots)
    __pyx_t_18 = __Pyx_PyObject_Unicode(__pyx_v_tls_roots); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11899, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_18);
    __Pyx_DECREF_SET(__pyx_v_tls_roots, __pyx_t_18);
    __pyx_t_18 = 0;
+11900:             str_to_utf8(b, <PyObject*>tls_roots, &c_tls_roots)
    __pyx_t_4 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_tls_roots), (&__pyx_v_c_tls_roots)); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11900, __pyx_L1_error)
+11901:             if not line_sender_opts_tls_roots(self._opts, c_tls_roots, &err):
    __pyx_t_11 = (!line_sender_opts_tls_roots(__pyx_v_self->_opts, __pyx_v_c_tls_roots, (&__pyx_v_err)));
    if (unlikely(__pyx_t_11)) {
/* … */
    }
+11902:                 raise c_err_to_py(err)
      __pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11902, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_Raise(__pyx_t_18, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      __PYX_ERR(0, 11902, __pyx_L1_error)
 11903: 
+11904:         if tls_roots_password is not None:
  __pyx_t_11 = (__pyx_v_tls_roots_password != Py_None);
  if (__pyx_t_11) {
/* … */
  }
+11905:             str_to_utf8(b, <PyObject*>tls_roots_password, &c_tls_roots_password)
    __pyx_t_4 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_tls_roots_password), (&__pyx_v_c_tls_roots_password)); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 11905, __pyx_L1_error)
+11906:             if not line_sender_opts_tls_roots_password(
    __pyx_t_11 = (!line_sender_opts_tls_roots_password(__pyx_v_self->_opts, __pyx_v_c_tls_roots_password, (&__pyx_v_err)));
    if (unlikely(__pyx_t_11)) {
/* … */
    }
 11907:                     self._opts, c_tls_roots_password, &err):
+11908:                 raise c_err_to_py(err)
      __pyx_t_18 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11908, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_Raise(__pyx_t_18, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      __PYX_ERR(0, 11908, __pyx_L1_error)
 11909: 
+11910:         if tls_ca is not None:
  __pyx_t_11 = (__pyx_v_tls_ca != Py_None);
  if (__pyx_t_11) {
/* … */
    goto __pyx_L118;
  }
+11911:             try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      goto __pyx_L124_try_end;
      __pyx_L119_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
      __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
      __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 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_L121_except_error:;
      __Pyx_XGIVEREF(__pyx_t_15);
      __Pyx_XGIVEREF(__pyx_t_14);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_14, __pyx_t_13);
      goto __pyx_L1_error;
      __pyx_L124_try_end:;
    }
+11912:                 c_tls_ca = TlsCa.parse(tls_ca).c_value
        __pyx_t_1 = NULL;
        __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_TlsCa); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11912, __pyx_L119_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_parse); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11912, __pyx_L119_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_10 = 1;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_2))) {
          __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
          assert(__pyx_t_1);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
          __pyx_t_10 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_tls_ca};
          __pyx_t_18 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11912, __pyx_L119_error)
          __Pyx_GOTREF(__pyx_t_18);
        }
        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_c_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11912, __pyx_L119_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        __pyx_t_26 = ((enum line_sender_ca)__Pyx_PyLong_As_enum__line_sender_ca(__pyx_t_2)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 11912, __pyx_L119_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_v_c_tls_ca = __pyx_t_26;
+11913:             except ValueError:
      __pyx_t_17 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_ValueError))));
      if (__pyx_t_17) {
        __Pyx_AddTraceback("questdb._client.Sender._set_sender_fields", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_18, &__pyx_t_1) < 0) __PYX_ERR(0, 11913, __pyx_L121_except_error)
        __Pyx_XGOTREF(__pyx_t_2);
        __Pyx_XGOTREF(__pyx_t_18);
        __Pyx_XGOTREF(__pyx_t_1);
+11914:                 raise QuestDBError(
        __pyx_t_8 = NULL;
        __Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 11914, __pyx_L121_except_error)
        __Pyx_GOTREF(__pyx_t_21);
+11915:                     QuestDBErrorCode.ConfigError,
        __Pyx_GetModuleGlobalName(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 11915, __pyx_L121_except_error)
        __Pyx_GOTREF(__pyx_t_20);
        __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 11915, __pyx_L121_except_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+11916:                     f'"tls_ca" has invalid value: {tls_ca!r}')
        __pyx_t_20 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_tls_ca), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 11916, __pyx_L121_except_error)
        __Pyx_GOTREF(__pyx_t_20);
        __pyx_t_19 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_tls_ca_has_invalid_value, __pyx_t_20); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 11916, __pyx_L121_except_error)
        __Pyx_GOTREF(__pyx_t_19);
        __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
        __pyx_t_10 = 1;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_21))) {
          __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_21);
          assert(__pyx_t_8);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_21);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_21, __pyx__function);
          __pyx_t_10 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_9, __pyx_t_19};
          __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_21, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
          __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
          if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11914, __pyx_L121_except_error)
          __Pyx_GOTREF(__pyx_t_7);
        }
        __Pyx_Raise(__pyx_t_7, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __PYX_ERR(0, 11914, __pyx_L121_except_error)
      }
      goto __pyx_L121_except_error;
+11917:             if not line_sender_opts_tls_ca(self._opts, c_tls_ca, &err):
    __pyx_t_11 = (!line_sender_opts_tls_ca(__pyx_v_self->_opts, __pyx_v_c_tls_ca, (&__pyx_v_err)));
    if (unlikely(__pyx_t_11)) {
/* … */
    }
+11918:                 raise c_err_to_py(err)
      __pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11918, __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(0, 11918, __pyx_L1_error)
+11919:         elif protocol.tls_enabled and tls_roots is None:
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_protocol, __pyx_mstate_global->__pyx_n_u_tls_enabled); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11919, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 11919, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_5) {
  } else {
    __pyx_t_11 = __pyx_t_5;
    goto __pyx_L128_bool_binop_done;
  }
  __pyx_t_5 = (__pyx_v_tls_roots == Py_None);
  __pyx_t_11 = __pyx_t_5;
  __pyx_L128_bool_binop_done:;
  if (__pyx_t_11) {
/* … */
  }
  __pyx_L118:;
 11920:             # Set different default for Python than the the Rust default.
 11921:             # We don't set it if `tls_roots` is set, as it would override it.
+11922:             c_tls_ca = line_sender_ca_webpki_and_os_roots
    __pyx_v_c_tls_ca = line_sender_ca_webpki_and_os_roots;
+11923:             if not line_sender_opts_tls_ca(self._opts, c_tls_ca, &err):
    __pyx_t_11 = (!line_sender_opts_tls_ca(__pyx_v_self->_opts, __pyx_v_c_tls_ca, (&__pyx_v_err)));
    if (unlikely(__pyx_t_11)) {
/* … */
    }
+11924:                 raise c_err_to_py(err)
      __pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11924, __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(0, 11924, __pyx_L1_error)
 11925: 
+11926:         if max_buf_size is not None:
  __pyx_t_11 = (__pyx_v_max_buf_size != Py_None);
  if (__pyx_t_11) {
/* … */
  }
+11927:             if not _is_int_not_bool(max_buf_size):
    __pyx_t_11 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_max_buf_size); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11927, __pyx_L1_error)
    __pyx_t_5 = (!__pyx_t_11);
    if (unlikely(__pyx_t_5)) {
/* … */
    }
+11928:                 raise TypeError(
      __pyx_t_18 = NULL;
+11929:                     '"max_buf_size" must be an int, '
      __pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_max_buf_size_must_be_an_int_not, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11929, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_10 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_18, __pyx_t_2};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11928, __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(0, 11928, __pyx_L1_error)
+11930:                     f'not {_fqn(type(max_buf_size))}')
      __pyx_t_2 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_max_buf_size)))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11930, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11930, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+11931:             c_max_buf_size = max_buf_size
    __pyx_t_25 = __Pyx_PyLong_As_uint64_t(__pyx_v_max_buf_size); if (unlikely((__pyx_t_25 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 11931, __pyx_L1_error)
    __pyx_v_c_max_buf_size = __pyx_t_25;
+11932:             if not line_sender_opts_max_buf_size(self._opts, c_max_buf_size, &err):
    __pyx_t_5 = (!line_sender_opts_max_buf_size(__pyx_v_self->_opts, __pyx_v_c_max_buf_size, (&__pyx_v_err)));
    if (unlikely(__pyx_t_5)) {
/* … */
    }
+11933:                 raise c_err_to_py(err)
      __pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11933, __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(0, 11933, __pyx_L1_error)
 11934: 
+11935:         if retry_timeout is not None:
  __pyx_t_5 = (__pyx_v_retry_timeout != Py_None);
  if (__pyx_t_5) {
/* … */
  }
+11936:             if _is_int_not_bool(retry_timeout):
    __pyx_t_5 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_retry_timeout); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11936, __pyx_L1_error)
    if (__pyx_t_5) {
/* … */
      goto __pyx_L135;
    }
+11937:                 c_retry_timeout = retry_timeout
      __pyx_t_25 = __Pyx_PyLong_As_uint64_t(__pyx_v_retry_timeout); if (unlikely((__pyx_t_25 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 11937, __pyx_L1_error)
      __pyx_v_c_retry_timeout = __pyx_t_25;
+11938:                 if not line_sender_opts_retry_timeout(self._opts, c_retry_timeout, &err):
      __pyx_t_5 = (!line_sender_opts_retry_timeout(__pyx_v_self->_opts, __pyx_v_c_retry_timeout, (&__pyx_v_err)));
      if (unlikely(__pyx_t_5)) {
/* … */
      }
+11939:                     raise c_err_to_py(err)
        __pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11939, __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(0, 11939, __pyx_L1_error)
+11940:             elif isinstance(retry_timeout, cp_timedelta):
    __pyx_t_5 = __Pyx_TypeCheck(__pyx_v_retry_timeout, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta); 
    if (likely(__pyx_t_5)) {
/* … */
      goto __pyx_L135;
    }
+11941:                 c_retry_timeout = _timedelta_to_millis(retry_timeout)
      if (!(likely(((__pyx_v_retry_timeout) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_retry_timeout, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta))))) __PYX_ERR(0, 11941, __pyx_L1_error)
      __pyx_t_25 = __pyx_f_7questdb_7_client__timedelta_to_millis(((PyDateTime_Delta *)__pyx_v_retry_timeout)); if (unlikely(__pyx_t_25 == ((uint64_t)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 11941, __pyx_L1_error)
      __pyx_v_c_retry_timeout = __pyx_t_25;
+11942:                 if not line_sender_opts_retry_timeout(self._opts, c_retry_timeout, &err):
      __pyx_t_5 = (!line_sender_opts_retry_timeout(__pyx_v_self->_opts, __pyx_v_c_retry_timeout, (&__pyx_v_err)));
      if (unlikely(__pyx_t_5)) {
/* … */
      }
+11943:                     raise c_err_to_py(err)
        __pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11943, __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(0, 11943, __pyx_L1_error)
 11944:             else:
+11945:                 raise TypeError(
    /*else*/ {
      __pyx_t_2 = NULL;
+11946:                     '"retry_timeout" must be an int or a timedelta, '
      __pyx_t_18 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_retry_timeout_must_be_an_int_or, __pyx_t_7); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11946, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_10 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_18};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11945, __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(0, 11945, __pyx_L1_error)
    }
    __pyx_L135:;
+11947:                     f'not {_fqn(type(retry_timeout))}')
      __pyx_t_18 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_retry_timeout)))); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11947, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_t_18); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11947, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 11948: 
+11949:         if retry_max_backoff is not None:
  __pyx_t_5 = (__pyx_v_retry_max_backoff != Py_None);
  if (__pyx_t_5) {
/* … */
  }
+11950:             if _is_int_not_bool(retry_max_backoff):
    __pyx_t_5 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_retry_max_backoff); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11950, __pyx_L1_error)
    if (__pyx_t_5) {
/* … */
      goto __pyx_L139;
    }
+11951:                 c_retry_max_backoff = retry_max_backoff
      __pyx_t_25 = __Pyx_PyLong_As_uint64_t(__pyx_v_retry_max_backoff); if (unlikely((__pyx_t_25 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 11951, __pyx_L1_error)
      __pyx_v_c_retry_max_backoff = __pyx_t_25;
+11952:                 if not line_sender_opts_retry_max_backoff(
      __pyx_t_5 = (!line_sender_opts_retry_max_backoff(__pyx_v_self->_opts, __pyx_v_c_retry_max_backoff, (&__pyx_v_err)));
      if (unlikely(__pyx_t_5)) {
/* … */
      }
 11953:                         self._opts, c_retry_max_backoff, &err):
+11954:                     raise c_err_to_py(err)
        __pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11954, __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(0, 11954, __pyx_L1_error)
+11955:             elif isinstance(retry_max_backoff, cp_timedelta):
    __pyx_t_5 = __Pyx_TypeCheck(__pyx_v_retry_max_backoff, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta); 
    if (likely(__pyx_t_5)) {
/* … */
      goto __pyx_L139;
    }
+11956:                 c_retry_max_backoff = _timedelta_to_millis(retry_max_backoff)
      if (!(likely(((__pyx_v_retry_max_backoff) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_retry_max_backoff, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta))))) __PYX_ERR(0, 11956, __pyx_L1_error)
      __pyx_t_25 = __pyx_f_7questdb_7_client__timedelta_to_millis(((PyDateTime_Delta *)__pyx_v_retry_max_backoff)); if (unlikely(__pyx_t_25 == ((uint64_t)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 11956, __pyx_L1_error)
      __pyx_v_c_retry_max_backoff = __pyx_t_25;
+11957:                 if not line_sender_opts_retry_max_backoff(
      __pyx_t_5 = (!line_sender_opts_retry_max_backoff(__pyx_v_self->_opts, __pyx_v_c_retry_max_backoff, (&__pyx_v_err)));
      if (unlikely(__pyx_t_5)) {
/* … */
      }
 11958:                         self._opts, c_retry_max_backoff, &err):
+11959:                     raise c_err_to_py(err)
        __pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11959, __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(0, 11959, __pyx_L1_error)
 11960:             else:
+11961:                 raise TypeError(
    /*else*/ {
      __pyx_t_18 = NULL;
+11962:                     '"retry_max_backoff" must be an int or a timedelta, '
      __pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_retry_max_backoff_must_be_an_in, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11962, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_10 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_18, __pyx_t_2};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11961, __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(0, 11961, __pyx_L1_error)
    }
    __pyx_L139:;
+11963:                     f'not {_fqn(type(retry_max_backoff))}')
      __pyx_t_2 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_retry_max_backoff)))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11963, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11963, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 11964: 
+11965:         if request_min_throughput is not None:
  __pyx_t_5 = (__pyx_v_request_min_throughput != Py_None);
  if (__pyx_t_5) {
/* … */
  }
+11966:             if not _is_int_not_bool(request_min_throughput):
    __pyx_t_5 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_request_min_throughput); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11966, __pyx_L1_error)
    __pyx_t_11 = (!__pyx_t_5);
    if (unlikely(__pyx_t_11)) {
/* … */
    }
+11967:                 raise TypeError(
      __pyx_t_2 = NULL;
+11968:                     '"request_min_throughput" must be an int, '
      __pyx_t_18 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_request_min_throughput_must_be, __pyx_t_7); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11968, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_10 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_18};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11967, __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(0, 11967, __pyx_L1_error)
+11969:                     f'not {_fqn(type(request_min_throughput))}')
      __pyx_t_18 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_request_min_throughput)))); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11969, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_t_18); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11969, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+11970:             c_request_min_throughput = request_min_throughput
    __pyx_t_25 = __Pyx_PyLong_As_uint64_t(__pyx_v_request_min_throughput); if (unlikely((__pyx_t_25 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 11970, __pyx_L1_error)
    __pyx_v_c_request_min_throughput = __pyx_t_25;
+11971:             if not line_sender_opts_request_min_throughput(self._opts, c_request_min_throughput, &err):
    __pyx_t_11 = (!line_sender_opts_request_min_throughput(__pyx_v_self->_opts, __pyx_v_c_request_min_throughput, (&__pyx_v_err)));
    if (unlikely(__pyx_t_11)) {
/* … */
    }
+11972:                 raise c_err_to_py(err)
      __pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11972, __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(0, 11972, __pyx_L1_error)
 11973: 
+11974:         if max_name_len is not None:
  __pyx_t_11 = (__pyx_v_max_name_len != Py_None);
  if (__pyx_t_11) {
/* … */
  }
+11975:             if not _is_int_not_bool(max_name_len):
    __pyx_t_11 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_max_name_len); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11975, __pyx_L1_error)
    __pyx_t_5 = (!__pyx_t_11);
    if (unlikely(__pyx_t_5)) {
/* … */
    }
+11976:                 raise TypeError(
      __pyx_t_18 = NULL;
+11977:                     '"max_name_len" must be an int, '
      __pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_max_name_len_must_be_an_int_not, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11977, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_10 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_18, __pyx_t_2};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11976, __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(0, 11976, __pyx_L1_error)
+11978:                     f'not {_fqn(type(max_name_len))}')
      __pyx_t_2 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_max_name_len)))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11978, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11978, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+11979:             c_max_name_len = max_name_len
    __pyx_t_10 = __Pyx_PyLong_As_size_t(__pyx_v_max_name_len); if (unlikely((__pyx_t_10 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 11979, __pyx_L1_error)
    __pyx_v_c_max_name_len = __pyx_t_10;
+11980:             if not line_sender_opts_max_name_len(self._opts, c_max_name_len, &err):
    __pyx_t_5 = (!line_sender_opts_max_name_len(__pyx_v_self->_opts, __pyx_v_c_max_name_len, (&__pyx_v_err)));
    if (unlikely(__pyx_t_5)) {
/* … */
    }
+11981:                 raise c_err_to_py(err)
      __pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11981, __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(0, 11981, __pyx_L1_error)
 11982: 
+11983:         if request_timeout is not None:
  __pyx_t_5 = (__pyx_v_request_timeout != Py_None);
  if (__pyx_t_5) {
/* … */
  }
+11984:             if _is_int_not_bool(request_timeout):
    __pyx_t_5 = __pyx_f_7questdb_7_client__is_int_not_bool(__pyx_v_request_timeout); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11984, __pyx_L1_error)
    if (__pyx_t_5) {
/* … */
      goto __pyx_L149;
    }
+11985:                 c_request_timeout = request_timeout
      __pyx_t_25 = __Pyx_PyLong_As_uint64_t(__pyx_v_request_timeout); if (unlikely((__pyx_t_25 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 11985, __pyx_L1_error)
      __pyx_v_c_request_timeout = __pyx_t_25;
+11986:                 if not line_sender_opts_request_timeout(self._opts, c_request_timeout, &err):
      __pyx_t_5 = (!line_sender_opts_request_timeout(__pyx_v_self->_opts, __pyx_v_c_request_timeout, (&__pyx_v_err)));
      if (unlikely(__pyx_t_5)) {
/* … */
      }
+11987:                     raise c_err_to_py(err)
        __pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11987, __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(0, 11987, __pyx_L1_error)
+11988:             elif isinstance(request_timeout, cp_timedelta):
    __pyx_t_5 = __Pyx_TypeCheck(__pyx_v_request_timeout, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta); 
    if (likely(__pyx_t_5)) {
/* … */
      goto __pyx_L149;
    }
+11989:                 c_request_timeout = _timedelta_to_millis(request_timeout)
      if (!(likely(((__pyx_v_request_timeout) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_request_timeout, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta))))) __PYX_ERR(0, 11989, __pyx_L1_error)
      __pyx_t_25 = __pyx_f_7questdb_7_client__timedelta_to_millis(((PyDateTime_Delta *)__pyx_v_request_timeout)); if (unlikely(__pyx_t_25 == ((uint64_t)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 11989, __pyx_L1_error)
      __pyx_v_c_request_timeout = __pyx_t_25;
+11990:                 if not line_sender_opts_request_timeout(self._opts, c_request_timeout, &err):
      __pyx_t_5 = (!line_sender_opts_request_timeout(__pyx_v_self->_opts, __pyx_v_c_request_timeout, (&__pyx_v_err)));
      if (unlikely(__pyx_t_5)) {
/* … */
      }
+11991:                     raise c_err_to_py(err)
        __pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11991, __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(0, 11991, __pyx_L1_error)
 11992:             else:
+11993:                 raise TypeError(
    /*else*/ {
      __pyx_t_2 = NULL;
+11994:                     '"request_timeout" must be an int or a timedelta, '
      __pyx_t_18 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_request_timeout_must_be_an_int, __pyx_t_7); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11994, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_10 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_18};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11993, __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(0, 11993, __pyx_L1_error)
    }
    __pyx_L149:;
+11995:                     f'not {_fqn(type(request_timeout))}')
      __pyx_t_18 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_request_timeout)))); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 11995, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_t_18); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 11995, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 11996: 
+11997:         if _is_qwp_ws_protocol(self._c_protocol) and auto_flush_bytes is None:
  __pyx_t_11 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 11997, __pyx_L1_error)
  if (__pyx_t_11) {
  } else {
    __pyx_t_5 = __pyx_t_11;
    goto __pyx_L153_bool_binop_done;
  }
  __pyx_t_11 = (__pyx_v_auto_flush_bytes == Py_None);
  __pyx_t_5 = __pyx_t_11;
  __pyx_L153_bool_binop_done:;
  if (__pyx_t_5) {
/* … */
  }
 11998:             # As on a pooled lease, the byte threshold derives from the
 11999:             # connection's frame cap, read on every check. The placeholder
 12000:             # lets the byte trigger alone turn auto-flush on.
+12001:             auto_flush_bytes = 1
    __Pyx_INCREF(__pyx_mstate_global->__pyx_int_1);
    __Pyx_DECREF_SET(__pyx_v_auto_flush_bytes, __pyx_mstate_global->__pyx_int_1);
+12002:             self._auto_flush_bytes_dynamic = True
    __pyx_v_self->_auto_flush_bytes_dynamic = 1;
+12003:         _parse_auto_flush(
  __pyx_t_4 = __pyx_f_7questdb_7_client__parse_auto_flush(__pyx_v_self->_c_protocol, __pyx_v_auto_flush, __pyx_v_auto_flush_rows, __pyx_v_auto_flush_bytes, __pyx_v_auto_flush_interval, (&__pyx_v_self->_auto_flush_mode), __pyx_v_c_max_datagram_size); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12003, __pyx_L1_error)
 12004:             self._c_protocol,
 12005:             auto_flush,
 12006:             auto_flush_rows,
 12007:             auto_flush_bytes,
 12008:             auto_flush_interval,
 12009:             &self._auto_flush_mode,
 12010:             c_max_datagram_size)
 12011: 
+12012:         self._init_buf_size = init_buf_size or 65536
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_init_buf_size); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 12012, __pyx_L1_error)
  if (!__pyx_t_5) {
  } else {
    __pyx_t_22 = __Pyx_PyLong_As_size_t(__pyx_v_init_buf_size); if (unlikely((__pyx_t_22 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 12012, __pyx_L1_error)
    __pyx_t_10 = __pyx_t_22;
    goto __pyx_L155_bool_binop_done;
  }
  __pyx_t_10 = 0x10000;
  __pyx_L155_bool_binop_done:;
  __pyx_v_self->_init_buf_size = __pyx_t_10;
+12013:         self._last_flush_ms = <int64_t*>calloc(1, sizeof(int64_t))
  __pyx_v_self->_last_flush_ms = ((int64_t *)calloc(1, (sizeof(int64_t))));
+12014:         if self._last_flush_ms == NULL:
  __pyx_t_5 = (__pyx_v_self->_last_flush_ms == NULL);
  if (unlikely(__pyx_t_5)) {
/* … */
  }
+12015:             raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 12015, __pyx_L1_error)
 12016: 
 12017:         # Retain a clone of the fully-configured opts (auth/TLS included) so a
 12018:         # ws sender's dataframe() can open a poolless direct columnar
 12019:         # connection per call, independent of how it was built.
+12020:         if _is_qwp_ws_protocol(self._c_protocol) and self._opts != NULL:
  __pyx_t_11 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 12020, __pyx_L1_error)
  if (__pyx_t_11) {
  } else {
    __pyx_t_5 = __pyx_t_11;
    goto __pyx_L159_bool_binop_done;
  }
  __pyx_t_11 = (__pyx_v_self->_opts != NULL);
  __pyx_t_5 = __pyx_t_11;
  __pyx_L159_bool_binop_done:;
  if (__pyx_t_5) {
/* … */
  }
+12021:             self._qwp_ws_opts = line_sender_opts_clone(self._opts)
    __pyx_v_self->_qwp_ws_opts = line_sender_opts_clone(__pyx_v_self->_opts);
 12022: 
+12023:     def __setattr__(self, name, value):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_6Sender_1__setattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_7questdb_7_client_6Sender_1__setattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setattr__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender___setattr__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), ((PyObject *)__pyx_v_name), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_7questdb_7_client_6Sender___setattr__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client.Sender.__setattr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+12024:         _setattr_without_dict(self, Sender, _DICT_ONLY_ATTRS, name, value)
  __pyx_t_1 = __pyx_v_7questdb_7_client__DICT_ONLY_ATTRS;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_7questdb_7_client__setattr_without_dict(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, ((PyObject*)__pyx_t_1), __pyx_v_name, __pyx_v_value); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12024, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 12025: 
 12026:     # A class attribute because Cython refuses an extension type's own
 12027:     # `__init_subclass__` method. See `_subclass_keeps_generic_setattr`.
+12028:     __init_subclass__ = classmethod(_sender_init_subclass)
  __Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_sender_init_subclass); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 12028, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __pyx_t_17 = __Pyx_Method_ClassMethod(__pyx_t_25); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12028, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_init_subclass, __pyx_t_17) < (0)) __PYX_ERR(0, 12028, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 12029: 
+12030:     def __dir__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_3__dir__(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_6Sender_3__dir__ = {"__dir__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_3__dir__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_3__dir__(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
) {
  #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("__dir__ (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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__dir__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__dir__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_2__dir__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_6Sender_2__dir__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
  PyObject *__pyx_v_names = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client.Sender.__dir__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_names);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_3__dir__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender___dir, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[223])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12030, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_dir, __pyx_t_17) < (0)) __PYX_ERR(0, 12030, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 12031:         # `object.__dir__` reads `__dict__`, which recreates the dictionary.
+12032:         names = object.__dir__(self)
  __pyx_t_2 = __pyx_builtin_object;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_self)};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_dir, __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(0, 12032, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_names = __pyx_t_1;
  __pyx_t_1 = 0;
+12033:         _sender_drop_unused_dict(self)
  __pyx_f_7questdb_7_client__sender_drop_unused_dict(__pyx_v_self);
+12034:         return names
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_names);
  __pyx_r = __pyx_v_names;
  goto __pyx_L0;
 12035: 
+12036:     def __cinit__(self):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_6Sender_5__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7questdb_7_client_6Sender_5__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_6Sender_4__cinit__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));

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

static int __pyx_pf_7questdb_7_client_6Sender_4__cinit__(struct __pyx_obj_7questdb_7_client_Sender *__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_AddTraceback("questdb._client.Sender.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 12037:         # Cython has just created the instance dictionary, which CPython
 12038:         # does not use: see `__dict__` above.
+12039:         qdb_drop_empty_instance_dict(self)
  qdb_drop_empty_instance_dict(((PyObject *)__pyx_v_self));
+12040:         self._c_protocol = line_sender_protocol_tcp
  __pyx_v_self->_c_protocol = line_sender_protocol_tcp;
+12041:         self._opts = NULL
  __pyx_v_self->_opts = NULL;
+12042:         self._impl = NULL
  __pyx_v_self->_impl = NULL;
+12043:         self._buffer = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_buffer);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_buffer);
  __pyx_v_self->_buffer = ((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None);
+12044:         self._thread_owner_token = object()
  __pyx_t_2 = NULL;
  __pyx_t_3 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_object, __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(0, 12044, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_thread_owner_token);
  __Pyx_DECREF(__pyx_v_self->_thread_owner_token);
  __pyx_v_self->_thread_owner_token = __pyx_t_1;
  __pyx_t_1 = 0;
+12045:         self._dispatch_context = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_dispatch_context);
  __Pyx_DECREF(__pyx_v_self->_dispatch_context);
  __pyx_v_self->_dispatch_context = Py_None;
+12046:         self._error_handler = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_error_handler);
  __Pyx_DECREF(__pyx_v_self->_error_handler);
  __pyx_v_self->_error_handler = Py_None;
+12047:         self._connection_listener = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_connection_listener);
  __Pyx_DECREF(__pyx_v_self->_connection_listener);
  __pyx_v_self->_connection_listener = Py_None;
+12048:         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;
+12049:         self._bearer_holder = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_bearer_holder);
  __Pyx_DECREF(__pyx_v_self->_bearer_holder);
  __pyx_v_self->_bearer_holder = Py_None;
+12050:         self._auto_flush_mode.enabled = False
  __pyx_v_self->_auto_flush_mode.enabled = 0;
+12051:         self._auto_flush_bytes_dynamic = False
  __pyx_v_self->_auto_flush_bytes_dynamic = 0;
+12052:         self._last_flush_ms = NULL
  __pyx_v_self->_last_flush_ms = NULL;
+12053:         self._init_buf_size = 0
  __pyx_v_self->_init_buf_size = 0;
+12054:         self._in_txn = False
  __pyx_v_self->_in_txn = 0;
+12055:         self._native_in_flight = False
  __pyx_v_self->_native_in_flight = 0;
+12056:         self._slot_id = -1
  __pyx_v_self->_slot_id = -1L;
+12057:         self._qwp_ws_opts = NULL
  __pyx_v_self->_qwp_ws_opts = NULL;
+12058:         self._cb_refs_key = 0
  __pyx_v_self->_cb_refs_key = 0;
 12059: 
+12060:     def __init__(
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_6Sender_7__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7questdb_7_client_6Sender_7__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_protocol = 0;
  PyObject *__pyx_v_host = 0;
  PyObject *__pyx_v_port = 0;
  PyObject *__pyx_v_bind_interface = 0;
  PyObject *__pyx_v_username = 0;
  PyObject *__pyx_v_password = 0;
  PyObject *__pyx_v_token = 0;
  PyObject *__pyx_v_oidc_auth = 0;
  PyObject *__pyx_v_bearer_token_provider = 0;
  PyObject *__pyx_v_token_x = 0;
  PyObject *__pyx_v_token_y = 0;
  PyObject *__pyx_v_auth_timeout = 0;
  PyObject *__pyx_v_tls_verify = 0;
  PyObject *__pyx_v_tls_ca = 0;
  PyObject *__pyx_v_tls_roots = 0;
  PyObject *__pyx_v_tls_roots_password = 0;
  PyObject *__pyx_v_max_buf_size = 0;
  PyObject *__pyx_v_retry_timeout = 0;
  PyObject *__pyx_v_retry_max_backoff = 0;
  PyObject *__pyx_v_request_min_throughput = 0;
  PyObject *__pyx_v_request_timeout = 0;
  PyObject *__pyx_v_auto_flush = 0;
  PyObject *__pyx_v_auto_flush_rows = 0;
  PyObject *__pyx_v_auto_flush_bytes = 0;
  PyObject *__pyx_v_auto_flush_interval = 0;
  PyObject *__pyx_v_max_datagram_size = 0;
  PyObject *__pyx_v_multicast_ttl = 0;
  PyObject *__pyx_v_qwp_ws_progress = 0;
  PyObject *__pyx_v_error_handler = 0;
  PyObject *__pyx_v_connection_listener = 0;
  PyObject *__pyx_v_connection_event_inbox_capacity = 0;
  PyObject *__pyx_v_protocol_version = 0;
  PyObject *__pyx_v_init_buf_size = 0;
  PyObject *__pyx_v_max_name_len = 0;
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (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_protocol,&__pyx_mstate_global->__pyx_n_u_host,&__pyx_mstate_global->__pyx_n_u_port,&__pyx_mstate_global->__pyx_n_u_bind_interface,&__pyx_mstate_global->__pyx_n_u_username,&__pyx_mstate_global->__pyx_n_u_password,&__pyx_mstate_global->__pyx_n_u_token,&__pyx_mstate_global->__pyx_n_u_oidc_auth,&__pyx_mstate_global->__pyx_n_u_bearer_token_provider_2,&__pyx_mstate_global->__pyx_n_u_token_x,&__pyx_mstate_global->__pyx_n_u_token_y,&__pyx_mstate_global->__pyx_n_u_auth_timeout,&__pyx_mstate_global->__pyx_n_u_tls_verify,&__pyx_mstate_global->__pyx_n_u_tls_ca,&__pyx_mstate_global->__pyx_n_u_tls_roots,&__pyx_mstate_global->__pyx_n_u_tls_roots_password,&__pyx_mstate_global->__pyx_n_u_max_buf_size,&__pyx_mstate_global->__pyx_n_u_retry_timeout,&__pyx_mstate_global->__pyx_n_u_retry_max_backoff,&__pyx_mstate_global->__pyx_n_u_request_min_throughput,&__pyx_mstate_global->__pyx_n_u_request_timeout,&__pyx_mstate_global->__pyx_n_u_auto_flush,&__pyx_mstate_global->__pyx_n_u_auto_flush_rows,&__pyx_mstate_global->__pyx_n_u_auto_flush_bytes,&__pyx_mstate_global->__pyx_n_u_auto_flush_interval,&__pyx_mstate_global->__pyx_n_u_max_datagram_size,&__pyx_mstate_global->__pyx_n_u_multicast_ttl,&__pyx_mstate_global->__pyx_n_u_qwp_ws_progress,&__pyx_mstate_global->__pyx_n_u_error_handler,&__pyx_mstate_global->__pyx_n_u_connection_listener,&__pyx_mstate_global->__pyx_n_u_connection_event_inbox_capacity,&__pyx_mstate_global->__pyx_n_u_protocol_version,&__pyx_mstate_global->__pyx_n_u_init_buf_size,&__pyx_mstate_global->__pyx_n_u_max_name_len,0};
  PyObject* values[34] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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(0, 12060, __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(0, 12060, __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(0, 12060, __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(0, 12060, __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(0, 12060, __pyx_L3_error)
/* … */
  /* 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_6Sender_6__init__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, PyObject *__pyx_v_protocol, PyObject *__pyx_v_host, PyObject *__pyx_v_port, PyObject *__pyx_v_bind_interface, PyObject *__pyx_v_username, PyObject *__pyx_v_password, PyObject *__pyx_v_token, PyObject *__pyx_v_oidc_auth, PyObject *__pyx_v_bearer_token_provider, PyObject *__pyx_v_token_x, PyObject *__pyx_v_token_y, PyObject *__pyx_v_auth_timeout, PyObject *__pyx_v_tls_verify, PyObject *__pyx_v_tls_ca, PyObject *__pyx_v_tls_roots, PyObject *__pyx_v_tls_roots_password, PyObject *__pyx_v_max_buf_size, PyObject *__pyx_v_retry_timeout, PyObject *__pyx_v_retry_max_backoff, PyObject *__pyx_v_request_min_throughput, PyObject *__pyx_v_request_timeout, PyObject *__pyx_v_auto_flush, PyObject *__pyx_v_auto_flush_rows, PyObject *__pyx_v_auto_flush_bytes, PyObject *__pyx_v_auto_flush_interval, PyObject *__pyx_v_max_datagram_size, PyObject *__pyx_v_multicast_ttl, PyObject *__pyx_v_qwp_ws_progress, PyObject *__pyx_v_error_handler, PyObject *__pyx_v_connection_listener, PyObject *__pyx_v_connection_event_inbox_capacity, PyObject *__pyx_v_protocol_version, PyObject *__pyx_v_init_buf_size, PyObject *__pyx_v_max_name_len) {
  struct line_sender_utf8 __pyx_v_c_host;
  PyObject *__pyx_v_port_str = 0;
  enum line_sender_protocol __pyx_v_c_protocol;
  struct line_sender_utf8 __pyx_v_c_port;
  struct qdb_pystr_buf *__pyx_v_b;
  int __pyx_r;
  __Pyx_INCREF(__pyx_v_protocol);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __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.Sender.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_port_str);
  __Pyx_XDECREF(__pyx_v_protocol);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 12061:             self,
 12062:             object protocol,
 12063:             str host,
 12064:             object port,
 12065:             *,
+12066:             str bind_interface=None,
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None));
+12067:             str username=None,
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject*)Py_None));
+12068:             str password=None,
      if (!values[5]) values[5] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
      if (!values[5]) values[5] = __Pyx_NewRef(((PyObject*)Py_None));
+12069:             str token=None,
      if (!values[6]) values[6] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
      if (!values[6]) values[6] = __Pyx_NewRef(((PyObject*)Py_None));
+12070:             object oidc_auth=None,
      if (!values[7]) values[7] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[7]) values[7] = __Pyx_NewRef(((PyObject *)Py_None));
+12071:             object bearer_token_provider=None,
      if (!values[8]) values[8] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[8]) values[8] = __Pyx_NewRef(((PyObject *)Py_None));
+12072:             str token_x=None,
      if (!values[9]) values[9] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
      if (!values[9]) values[9] = __Pyx_NewRef(((PyObject*)Py_None));
+12073:             str token_y=None,
      if (!values[10]) values[10] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
      if (!values[10]) values[10] = __Pyx_NewRef(((PyObject*)Py_None));
+12074:             object auth_timeout=None,  # default: 15000 milliseconds
      if (!values[11]) values[11] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[11]) values[11] = __Pyx_NewRef(((PyObject *)Py_None));
+12075:             object tls_verify=None,  # default: True
      if (!values[12]) values[12] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[12]) values[12] = __Pyx_NewRef(((PyObject *)Py_None));
+12076:             object tls_ca=None,  # TLS default: TlsCa.WebpkiAndOsRoots
      if (!values[13]) values[13] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[13]) values[13] = __Pyx_NewRef(((PyObject *)Py_None));
+12077:             object tls_roots=None,
      if (!values[14]) values[14] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[14]) values[14] = __Pyx_NewRef(((PyObject *)Py_None));
+12078:             str tls_roots_password=None,
      if (!values[15]) values[15] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
      if (!values[15]) values[15] = __Pyx_NewRef(((PyObject*)Py_None));
+12079:             object max_buf_size=None,  # 100 * 1024 * 1024 - 100MiB
      if (!values[16]) values[16] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[16]) values[16] = __Pyx_NewRef(((PyObject *)Py_None));
+12080:             object retry_timeout=None,  # default: 10000 milliseconds
      if (!values[17]) values[17] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[17]) values[17] = __Pyx_NewRef(((PyObject *)Py_None));
+12081:             object retry_max_backoff=None,  # default: 1000 milliseconds
      if (!values[18]) values[18] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[18]) values[18] = __Pyx_NewRef(((PyObject *)Py_None));
+12082:             object request_min_throughput=None, # default: 100 * 1024 - 100KiB/s
      if (!values[19]) values[19] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[19]) values[19] = __Pyx_NewRef(((PyObject *)Py_None));
+12083:             object request_timeout=None,
      if (!values[20]) values[20] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[20]) values[20] = __Pyx_NewRef(((PyObject *)Py_None));
+12084:             object auto_flush=None,  # Default True
      if (!values[21]) values[21] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[21]) values[21] = __Pyx_NewRef(((PyObject *)Py_None));
+12085:             object auto_flush_rows=None,  # Default 75000 (HTTP) or 600 (TCP)
      if (!values[22]) values[22] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[22]) values[22] = __Pyx_NewRef(((PyObject *)Py_None));
+12086:             object auto_flush_bytes=None,  # Default off (90% of the frame cap for ws and wss)
      if (!values[23]) values[23] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[23]) values[23] = __Pyx_NewRef(((PyObject *)Py_None));
+12087:             object auto_flush_interval=None,  # Default 1000 milliseconds
      if (!values[24]) values[24] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[24]) values[24] = __Pyx_NewRef(((PyObject *)Py_None));
+12088:             object max_datagram_size=None,  # Default 1400 for QWP/UDP
      if (!values[25]) values[25] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[25]) values[25] = __Pyx_NewRef(((PyObject *)Py_None));
+12089:             object multicast_ttl=None,  # Default 1 for QWP/UDP
      if (!values[26]) values[26] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[26]) values[26] = __Pyx_NewRef(((PyObject *)Py_None));
+12090:             object qwp_ws_progress=None,  # Default background for QWP/WebSocket
      if (!values[27]) values[27] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[27]) values[27] = __Pyx_NewRef(((PyObject *)Py_None));
+12091:             object error_handler=None,
      if (!values[28]) values[28] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[28]) values[28] = __Pyx_NewRef(((PyObject *)Py_None));
+12092:             object connection_listener=None,
      if (!values[29]) values[29] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[30]) values[30] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
/* … */
      if (!values[29]) values[29] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[30]) values[30] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
 12093:             object connection_event_inbox_capacity=0,
+12094:             object protocol_version=None,  # Default auto
      if (!values[31]) values[31] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[31]) values[31] = __Pyx_NewRef(((PyObject *)Py_None));
+12095:             object init_buf_size=None,  # 64KiB
      if (!values[32]) values[32] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[32]) values[32] = __Pyx_NewRef(((PyObject *)Py_None));
+12096:             object max_name_len=None):  # 127
      if (!values[33]) values[33] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, i); __PYX_ERR(0, 12060, __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(0, 12060, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_VARARGS(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 12060, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_VARARGS(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 12060, __pyx_L3_error)
/* … */
      if (!values[33]) values[33] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_protocol = values[0];
    __pyx_v_host = ((PyObject*)values[1]);
    __pyx_v_port = values[2];
    __pyx_v_bind_interface = ((PyObject*)values[3]);
    __pyx_v_username = ((PyObject*)values[4]);
    __pyx_v_password = ((PyObject*)values[5]);
    __pyx_v_token = ((PyObject*)values[6]);
    __pyx_v_oidc_auth = values[7];
    __pyx_v_bearer_token_provider = values[8];
    __pyx_v_token_x = ((PyObject*)values[9]);
    __pyx_v_token_y = ((PyObject*)values[10]);
    __pyx_v_auth_timeout = values[11];
    __pyx_v_tls_verify = values[12];
    __pyx_v_tls_ca = values[13];
    __pyx_v_tls_roots = values[14];
    __pyx_v_tls_roots_password = ((PyObject*)values[15]);
    __pyx_v_max_buf_size = values[16];
    __pyx_v_retry_timeout = values[17];
    __pyx_v_retry_max_backoff = values[18];
    __pyx_v_request_min_throughput = values[19];
    __pyx_v_request_timeout = values[20];
    __pyx_v_auto_flush = values[21];
    __pyx_v_auto_flush_rows = values[22];
    __pyx_v_auto_flush_bytes = values[23];
    __pyx_v_auto_flush_interval = values[24];
    __pyx_v_max_datagram_size = values[25];
    __pyx_v_multicast_ttl = values[26];
    __pyx_v_qwp_ws_progress = values[27];
    __pyx_v_error_handler = values[28];
    __pyx_v_connection_listener = values[29];
    __pyx_v_connection_event_inbox_capacity = values[30];
    __pyx_v_protocol_version = values[31];
    __pyx_v_init_buf_size = values[32];
    __pyx_v_max_name_len = values[33];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 12060, __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.Sender.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_host), (&PyUnicode_Type), 1, "host", 1))) __PYX_ERR(0, 12063, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_bind_interface), (&PyUnicode_Type), 1, "bind_interface", 1))) __PYX_ERR(0, 12066, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_username), (&PyUnicode_Type), 1, "username", 1))) __PYX_ERR(0, 12067, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_password), (&PyUnicode_Type), 1, "password", 1))) __PYX_ERR(0, 12068, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 1, "token", 1))) __PYX_ERR(0, 12069, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token_x), (&PyUnicode_Type), 1, "token_x", 1))) __PYX_ERR(0, 12072, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token_y), (&PyUnicode_Type), 1, "token_y", 1))) __PYX_ERR(0, 12073, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tls_roots_password), (&PyUnicode_Type), 1, "tls_roots_password", 1))) __PYX_ERR(0, 12078, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_6__init__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), __pyx_v_protocol, __pyx_v_host, __pyx_v_port, __pyx_v_bind_interface, __pyx_v_username, __pyx_v_password, __pyx_v_token, __pyx_v_oidc_auth, __pyx_v_bearer_token_provider, __pyx_v_token_x, __pyx_v_token_y, __pyx_v_auth_timeout, __pyx_v_tls_verify, __pyx_v_tls_ca, __pyx_v_tls_roots, __pyx_v_tls_roots_password, __pyx_v_max_buf_size, __pyx_v_retry_timeout, __pyx_v_retry_max_backoff, __pyx_v_request_min_throughput, __pyx_v_request_timeout, __pyx_v_auto_flush, __pyx_v_auto_flush_rows, __pyx_v_auto_flush_bytes, __pyx_v_auto_flush_interval, __pyx_v_max_datagram_size, __pyx_v_multicast_ttl, __pyx_v_qwp_ws_progress, __pyx_v_error_handler, __pyx_v_connection_listener, __pyx_v_connection_event_inbox_capacity, __pyx_v_protocol_version, __pyx_v_init_buf_size, __pyx_v_max_name_len);
 12097: 
 12098:         cdef line_sender_utf8 c_host
 12099:         cdef str port_str
 12100:         cdef line_sender_protocol c_protocol
 12101:         cdef line_sender_utf8 c_port
 12102:         cdef qdb_pystr_buf* b
+12103:         if (self._opts != NULL or self._impl != NULL or
  __pyx_t_2 = (__pyx_v_self->_opts != NULL);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_self->_impl != NULL);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
/* … */
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+12104:                 self._last_flush_ms != NULL):
  __pyx_t_2 = (__pyx_v_self->_last_flush_ms != NULL);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
+12105:             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(0, 12105, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
+12106:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12106, __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(0, 12106, __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_Sender_is_already_initialized};
      __pyx_t_3 = __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_3)) __PYX_ERR(0, 12105, __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(0, 12105, __pyx_L1_error)
 12107:                 'Sender is already initialized.')
+12108:         b = qdb_pystr_buf_new()
  __pyx_v_b = qdb_pystr_buf_new();
+12109:         try:
  /*try:*/ {
+12110:             protocol = Protocol.parse(protocol)
    __pyx_t_5 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_Protocol); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12110, __pyx_L8_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_parse); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12110, __pyx_L8_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_8 = 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_8 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_protocol};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__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(0, 12110, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_DECREF_SET(__pyx_v_protocol, __pyx_t_3);
    __pyx_t_3 = 0;
+12111:             if protocol is None:
    __pyx_t_1 = (__pyx_v_protocol == Py_None);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+12112:                 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(0, 12112, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_5);
+12113:                     QuestDBErrorCode.ConfigError,
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12113, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12113, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 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_6, __pyx_mstate_global->__pyx_kp_u_protocol_is_required_and_cannot};
        __pyx_t_3 = __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_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12112, __pyx_L8_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(0, 12112, __pyx_L8_error)
 12114:                     '"protocol" is required and cannot be None.')
+12115:             c_protocol = protocol.c_value
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_protocol, __pyx_mstate_global->__pyx_n_u_c_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12115, __pyx_L8_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_9 = ((enum line_sender_protocol)__Pyx_PyLong_As_enum__line_sender_protocol(__pyx_t_3)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 12115, __pyx_L8_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_c_protocol = __pyx_t_9;
+12116:             if PyLong_CheckExact(<PyObject*>port):
    __pyx_t_1 = PyLong_CheckExact(((PyObject *)__pyx_v_port));
    if (__pyx_t_1) {
/* … */
      goto __pyx_L11;
    }
+12117:                 port_str = str(port)
      __pyx_t_3 = __Pyx_PyObject_Unicode(__pyx_v_port); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12117, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_v_port_str = ((PyObject*)__pyx_t_3);
      __pyx_t_3 = 0;
+12118:             elif PyUnicode_CheckExact(<PyObject*>port):
    __pyx_t_1 = PyUnicode_CheckExact(((PyObject *)__pyx_v_port));
    if (likely(__pyx_t_1)) {
/* … */
      goto __pyx_L11;
    }
+12119:                 port_str = port
      __pyx_t_3 = __pyx_v_port;
      __Pyx_INCREF(__pyx_t_3);
      if (!(likely(PyUnicode_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_3))) __PYX_ERR(0, 12119, __pyx_L8_error)
      __pyx_v_port_str = ((PyObject*)__pyx_t_3);
      __pyx_t_3 = 0;
 12120:             else:
+12121:                 raise TypeError(
    /*else*/ {
      __pyx_t_5 = NULL;
+12122:                     f'port must be an int or a str, not {_fqn(type(port))}')
      __pyx_t_6 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_port)))); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12122, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_4 = __Pyx_PyUnicode_Unicode(__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12122, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_port_must_be_an_int_or_a_str_not, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12122, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_8 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_6};
        __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_8, (2-__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;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12121, __pyx_L8_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(0, 12121, __pyx_L8_error)
    }
    __pyx_L11:;
+12123:             str_to_utf8(b, <PyObject*>host, &c_host)
    __pyx_t_10 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_host), (&__pyx_v_c_host)); if (unlikely(__pyx_t_10 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12123, __pyx_L8_error)
+12124:             str_to_utf8(b, <PyObject*>port_str, &c_port)
    __pyx_t_10 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_port_str), (&__pyx_v_c_port)); if (unlikely(__pyx_t_10 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12124, __pyx_L8_error)
+12125:             self._opts = line_sender_opts_new_service(c_protocol, c_host, c_port)
    __pyx_v_self->_opts = line_sender_opts_new_service(__pyx_v_c_protocol, __pyx_v_c_host, __pyx_v_c_port);
 12126: 
+12127:             self._set_sender_fields(
    __pyx_t_10 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_self->__pyx_vtab)->_set_sender_fields(__pyx_v_self, __pyx_v_b, __pyx_v_protocol, __pyx_v_bind_interface, __pyx_v_username, __pyx_v_password, __pyx_v_token, __pyx_v_oidc_auth, __pyx_v_bearer_token_provider, __pyx_v_token_x, __pyx_v_token_y, __pyx_v_auth_timeout, __pyx_v_tls_verify, __pyx_v_tls_ca, __pyx_v_tls_roots, __pyx_v_tls_roots_password, __pyx_v_max_buf_size, __pyx_v_retry_timeout, __pyx_v_retry_max_backoff, __pyx_v_request_min_throughput, __pyx_v_request_timeout, __pyx_v_auto_flush, __pyx_v_auto_flush_rows, __pyx_v_auto_flush_bytes, __pyx_v_auto_flush_interval, __pyx_v_max_datagram_size, __pyx_v_multicast_ttl, __pyx_v_protocol_version, __pyx_v_qwp_ws_progress, __pyx_v_error_handler, __pyx_v_connection_listener, __pyx_v_connection_event_inbox_capacity, __pyx_v_init_buf_size, __pyx_v_max_name_len); if (unlikely(__pyx_t_10 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12127, __pyx_L8_error)
  }
 12128:                 b,
 12129:                 protocol,
 12130:                 bind_interface,
 12131:                 username,
 12132:                 password,
 12133:                 token,
 12134:                 oidc_auth,
 12135:                 bearer_token_provider,
 12136:                 token_x,
 12137:                 token_y,
 12138:                 auth_timeout,
 12139:                 tls_verify,
 12140:                 tls_ca,
 12141:                 tls_roots,
 12142:                 tls_roots_password,
 12143:                 max_buf_size,
 12144:                 retry_timeout,
 12145:                 retry_max_backoff,
 12146:                 request_min_throughput,
 12147:                 request_timeout,
 12148:                 auto_flush,
 12149:                 auto_flush_rows,
 12150:                 auto_flush_bytes,
 12151:                 auto_flush_interval,
 12152:                 max_datagram_size,
 12153:                 multicast_ttl,
 12154:                 protocol_version,
 12155:                 qwp_ws_progress,
 12156:                 error_handler,
 12157:                 connection_listener,
 12158:                 connection_event_inbox_capacity,
 12159:                 init_buf_size,
 12160:                 max_name_len)
 12161:         finally:
+12162:             qdb_pystr_buf_free(b)
  /*finally:*/ {
    /*normal exit:*/{
      qdb_pystr_buf_free(__pyx_v_b);
      goto __pyx_L9;
    }
    __pyx_L8_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 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_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
      if ( unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
      __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_XGOTREF(__pyx_t_19);
      __pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
      {
        qdb_pystr_buf_free(__pyx_v_b);
      }
      __Pyx_XGIVEREF(__pyx_t_17);
      __Pyx_XGIVEREF(__pyx_t_18);
      __Pyx_XGIVEREF(__pyx_t_19);
      __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
      __Pyx_XGIVEREF(__pyx_t_14);
      __Pyx_XGIVEREF(__pyx_t_15);
      __Pyx_XGIVEREF(__pyx_t_16);
      __Pyx_ErrRestore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
      __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
      __pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
      goto __pyx_L1_error;
    }
    __pyx_L9:;
  }
 12163: 
+12164:     @staticmethod
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_9from_conf(CYTHON_UNUSED 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_6Sender_8from_conf, "\n        Construct a sender from a :ref:`configuration string <sender_conf>`.\n\n        The additional arguments are used to specify additional parameters\n        which are not present in the configuration string.\n\n        Note that any parameters already present in the configuration string\n        cannot be overridden.\n\n        ``oidc_auth`` attaches a native rotating OIDC token provider \342\200\224 see\n        :class:`questdb.auth.OidcDeviceAuth` and the :ref:`oidc_auth` guide. It\n        is a Python argument only, with no configuration-string equivalent, and\n        is mutually exclusive with ``token``, ``username`` and ``password``.\n        Use ``https::`` or ``wss::``: over plain ``http::`` or ``ws::`` to a\n        non-loopback host the token is sent in cleartext.\n        Call :meth:`~questdb.auth.OidcDeviceAuth.sign_in` before the first\n        flush: connect and reconnect load or silently refresh a token but never\n        start an interactive device flow. Supported on HTTP(S) and\n        QWP/WebSocket; TCP and UDP are rejected.\n\n        ``bearer_token_provider`` attaches a rotating Bearer-token provider\n        instead: a :class:`questdb.auth.RefreshingTokenProvider` around a token\n        source of your own, a callable returning a token, or an object with\n        ``token()`` and an optional ``on_rejected()`` -- see\n        :ref:`refreshing_token_provider`. It is mutually exclusive with\n        ``oidc_auth``, ``token``, ``username`` and ``password``. It runs\n        inside every ILP/HTTP flush, and inside a connect the call waits for\n        such as :meth:`establish <questdb.Sender.establish>`, where neither\n        it nor a Python signal handler may use this sender; see\n        :ref:`token_provider_reentrancy`.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_9from_conf = {"from_conf", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_9from_conf, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_8from_conf};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_9from_conf(CYTHON_UNUSED 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_conf_str = 0;
  PyObject *__pyx_v_bind_interface = 0;
  PyObject *__pyx_v_username = 0;
  PyObject *__pyx_v_password = 0;
  PyObject *__pyx_v_token = 0;
  PyObject *__pyx_v_oidc_auth = 0;
  PyObject *__pyx_v_bearer_token_provider = 0;
  PyObject *__pyx_v_token_x = 0;
  PyObject *__pyx_v_token_y = 0;
  PyObject *__pyx_v_auth_timeout = 0;
  PyObject *__pyx_v_tls_verify = 0;
  PyObject *__pyx_v_tls_ca = 0;
  PyObject *__pyx_v_tls_roots = 0;
  PyObject *__pyx_v_tls_roots_password = 0;
  PyObject *__pyx_v_max_buf_size = 0;
  PyObject *__pyx_v_retry_timeout = 0;
  PyObject *__pyx_v_retry_max_backoff = 0;
  PyObject *__pyx_v_request_min_throughput = 0;
  PyObject *__pyx_v_request_timeout = 0;
  PyObject *__pyx_v_auto_flush = 0;
  PyObject *__pyx_v_auto_flush_rows = 0;
  PyObject *__pyx_v_auto_flush_bytes = 0;
  PyObject *__pyx_v_auto_flush_interval = 0;
  PyObject *__pyx_v_max_datagram_size = 0;
  PyObject *__pyx_v_multicast_ttl = 0;
  PyObject *__pyx_v_qwp_ws_progress = 0;
  PyObject *__pyx_v_error_handler = 0;
  PyObject *__pyx_v_connection_listener = 0;
  PyObject *__pyx_v_connection_event_inbox_capacity = 0;
  PyObject *__pyx_v_protocol_version = 0;
  PyObject *__pyx_v_init_buf_size = 0;
  PyObject *__pyx_v_max_name_len = 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("from_conf (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_conf_str,&__pyx_mstate_global->__pyx_n_u_bind_interface,&__pyx_mstate_global->__pyx_n_u_username,&__pyx_mstate_global->__pyx_n_u_password,&__pyx_mstate_global->__pyx_n_u_token,&__pyx_mstate_global->__pyx_n_u_oidc_auth,&__pyx_mstate_global->__pyx_n_u_bearer_token_provider_2,&__pyx_mstate_global->__pyx_n_u_token_x,&__pyx_mstate_global->__pyx_n_u_token_y,&__pyx_mstate_global->__pyx_n_u_auth_timeout,&__pyx_mstate_global->__pyx_n_u_tls_verify,&__pyx_mstate_global->__pyx_n_u_tls_ca,&__pyx_mstate_global->__pyx_n_u_tls_roots,&__pyx_mstate_global->__pyx_n_u_tls_roots_password,&__pyx_mstate_global->__pyx_n_u_max_buf_size,&__pyx_mstate_global->__pyx_n_u_retry_timeout,&__pyx_mstate_global->__pyx_n_u_retry_max_backoff,&__pyx_mstate_global->__pyx_n_u_request_min_throughput,&__pyx_mstate_global->__pyx_n_u_request_timeout,&__pyx_mstate_global->__pyx_n_u_auto_flush,&__pyx_mstate_global->__pyx_n_u_auto_flush_rows,&__pyx_mstate_global->__pyx_n_u_auto_flush_bytes,&__pyx_mstate_global->__pyx_n_u_auto_flush_interval,&__pyx_mstate_global->__pyx_n_u_max_datagram_size,&__pyx_mstate_global->__pyx_n_u_multicast_ttl,&__pyx_mstate_global->__pyx_n_u_qwp_ws_progress,&__pyx_mstate_global->__pyx_n_u_error_handler,&__pyx_mstate_global->__pyx_n_u_connection_listener,&__pyx_mstate_global->__pyx_n_u_connection_event_inbox_capacity,&__pyx_mstate_global->__pyx_n_u_protocol_version,&__pyx_mstate_global->__pyx_n_u_init_buf_size,&__pyx_mstate_global->__pyx_n_u_max_name_len,0};
  PyObject* values[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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(0, 12164, __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(0, 12164, __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, "from_conf", 0) < (0)) __PYX_ERR(0, 12164, __pyx_L3_error)
/* … */
  /* 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_gb_7questdb_7_client_6Sender_9from_conf_2generator13(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
static PyObject *__pyx_pf_7questdb_7_client_6Sender_8from_conf(PyObject *__pyx_v_conf_str, PyObject *__pyx_v_bind_interface, PyObject *__pyx_v_username, PyObject *__pyx_v_password, PyObject *__pyx_v_token, PyObject *__pyx_v_oidc_auth, PyObject *__pyx_v_bearer_token_provider, PyObject *__pyx_v_token_x, PyObject *__pyx_v_token_y, PyObject *__pyx_v_auth_timeout, PyObject *__pyx_v_tls_verify, PyObject *__pyx_v_tls_ca, PyObject *__pyx_v_tls_roots, PyObject *__pyx_v_tls_roots_password, PyObject *__pyx_v_max_buf_size, PyObject *__pyx_v_retry_timeout, PyObject *__pyx_v_retry_max_backoff, PyObject *__pyx_v_request_min_throughput, PyObject *__pyx_v_request_timeout, PyObject *__pyx_v_auto_flush, PyObject *__pyx_v_auto_flush_rows, PyObject *__pyx_v_auto_flush_bytes, PyObject *__pyx_v_auto_flush_interval, PyObject *__pyx_v_max_datagram_size, PyObject *__pyx_v_multicast_ttl, PyObject *__pyx_v_qwp_ws_progress, PyObject *__pyx_v_error_handler, PyObject *__pyx_v_connection_listener, PyObject *__pyx_v_connection_event_inbox_capacity, PyObject *__pyx_v_protocol_version, PyObject *__pyx_v_init_buf_size, PyObject *__pyx_v_max_name_len) {
  struct line_sender_error *__pyx_v_err;
  PyObject *__pyx_v_protocol = 0;
  struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender = 0;
  PyObject *__pyx_v_synthetic_conf_str = 0;
  struct line_sender_utf8 __pyx_v_c_synthetic_conf_str;
  PyObject *__pyx_v_params = 0;
  struct qdb_pystr_buf *__pyx_v_b;
  PyObject *__pyx_v_addr = NULL;
  PyObject *__pyx_v_override_key = NULL;
  PyObject *__pyx_v_override_value = NULL;
  PyObject *__pyx_v_python_handled_keys = NULL;
  PyObject *__pyx_v_synthetic_params = NULL;
  PyObject *__pyx_v_key = NULL;
  PyObject *__pyx_v_value = NULL;
  PyObject *__pyx_gb_7questdb_7_client_6Sender_9from_conf_2generator13 = 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_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_16);
  __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_XDECREF(__pyx_t_23);
  __Pyx_XDECREF(__pyx_t_24);
  __Pyx_XDECREF(__pyx_t_25);
  __Pyx_XDECREF(__pyx_t_26);
  __Pyx_XDECREF(__pyx_t_27);
  __Pyx_XDECREF(__pyx_t_28);
  __Pyx_XDECREF(__pyx_t_29);
  __Pyx_XDECREF(__pyx_t_30);
  __Pyx_XDECREF(__pyx_t_31);
  __Pyx_XDECREF(__pyx_t_32);
  __Pyx_XDECREF(__pyx_t_33);
  __Pyx_XDECREF(__pyx_t_34);
  __Pyx_XDECREF(__pyx_t_35);
  __Pyx_XDECREF(__pyx_t_36);
  __Pyx_AddTraceback("questdb._client.Sender.from_conf", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_protocol);
  __Pyx_XDECREF((PyObject *)__pyx_v_sender);
  __Pyx_XDECREF(__pyx_v_synthetic_conf_str);
  __Pyx_XDECREF(__pyx_v_params);
  __Pyx_XDECREF(__pyx_v_addr);
  __Pyx_XDECREF(__pyx_v_override_key);
  __Pyx_XDECREF(__pyx_v_override_value);
  __Pyx_XDECREF(__pyx_v_python_handled_keys);
  __Pyx_XDECREF(__pyx_v_synthetic_params);
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XDECREF(__pyx_v_value);
  __Pyx_XDECREF(__pyx_gb_7questdb_7_client_6Sender_9from_conf_2generator13);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_PyDict_NewPresized(31); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12164, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
/* … */
  __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_9from_conf, __Pyx_CYFUNCTION_STATICMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_from_conf, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[224])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 12164, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25);
  #endif
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_25, __pyx_t_17);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_from_conf, __pyx_t_25) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __pyx_t_17 = NULL;
  __Pyx_GetNameInClass(__pyx_t_4, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_from_conf); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12164, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_17, __pyx_t_4};
    __pyx_t_25 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_staticmethod, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 12164, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_25);
  }
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_from_conf, __pyx_t_25) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 12165:     def from_conf(
 12166:             str conf_str,
 12167:             *,
+12168:             str bind_interface=None,
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_bind_interface, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12169:             str username=None,
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_username, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12170:             str password=None,
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_password, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12171:             str token=None,
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_token, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12172:             object oidc_auth=None,
      if (!values[5]) values[5] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[5]) values[5] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_oidc_auth, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12173:             object bearer_token_provider=None,
      if (!values[6]) values[6] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[6]) values[6] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_bearer_token_provider_2, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12174:             str token_x=None,
      if (!values[7]) values[7] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
      if (!values[7]) values[7] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_token_x, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12175:             str token_y=None,
      if (!values[8]) values[8] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
      if (!values[8]) values[8] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_token_y, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12176:             object auth_timeout=None,  # default: 15000 milliseconds
      if (!values[9]) values[9] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[9]) values[9] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_auth_timeout, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12177:             object tls_verify=None,  # default: True
      if (!values[10]) values[10] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[10]) values[10] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_tls_verify, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12178:             object tls_ca=None,  # TLS default: TlsCa.WebpkiAndOsRoots
      if (!values[11]) values[11] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[11]) values[11] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_tls_ca, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12179:             object tls_roots=None,
      if (!values[12]) values[12] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[12]) values[12] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_tls_roots, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12180:             str tls_roots_password=None,
      if (!values[13]) values[13] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
      if (!values[13]) values[13] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_tls_roots_password, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12181:             object max_buf_size=None,  # 100 * 1024 * 1024 - 100MiB
      if (!values[14]) values[14] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[14]) values[14] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_max_buf_size, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12182:             object retry_timeout=None,  # default: 10000 milliseconds
      if (!values[15]) values[15] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[15]) values[15] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_retry_timeout, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12183:             object retry_max_backoff=None,  # default: 1000 milliseconds
      if (!values[16]) values[16] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[16]) values[16] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_retry_max_backoff, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12184:             object request_min_throughput=None, # default: 100 * 1024 - 100KiB/s
      if (!values[17]) values[17] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[17]) values[17] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_request_min_throughput, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12185:             object request_timeout=None,
      if (!values[18]) values[18] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[18]) values[18] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_request_timeout, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12186:             object auto_flush=None,  # Default True
      if (!values[19]) values[19] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[19]) values[19] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_auto_flush, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12187:             object auto_flush_rows=None,  # Default 75000 (HTTP) or 600 (TCP)
      if (!values[20]) values[20] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[20]) values[20] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_auto_flush_rows, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12188:             object auto_flush_bytes=None,  # Default off (90% of the frame cap for ws and wss)
      if (!values[21]) values[21] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[21]) values[21] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12189:             object auto_flush_interval=None,  # Default 1000 milliseconds
      if (!values[22]) values[22] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[22]) values[22] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_auto_flush_interval, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12190:             object max_datagram_size=None,  # Default 1400 for QWP/UDP
      if (!values[23]) values[23] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[23]) values[23] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_max_datagram_size, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12191:             object multicast_ttl=None,  # Default 1 for QWP/UDP
      if (!values[24]) values[24] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[24]) values[24] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_multicast_ttl, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12192:             object qwp_ws_progress=None,  # Default background for QWP/WebSocket
      if (!values[25]) values[25] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[25]) values[25] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_qwp_ws_progress, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12193:             object error_handler=None,
      if (!values[26]) values[26] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[26]) values[26] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_error_handler, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12194:             object connection_listener=None,
      if (!values[27]) values[27] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[28]) values[28] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
/* … */
      if (!values[27]) values[27] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[28]) values[28] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_connection_listener, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_connection_event_inbox_capacity, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
 12195:             object connection_event_inbox_capacity=0,
+12196:             object protocol_version=None,  # Default auto
      if (!values[29]) values[29] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[29]) values[29] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_protocol_version, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12197:             object init_buf_size=None,  # 64KiB
      if (!values[30]) values[30] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[30]) values[30] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_init_buf_size, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
+12198:             object max_name_len=None):  # 127
      if (!values[31]) values[31] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("from_conf", 1, 1, 1, i); __PYX_ERR(0, 12164, __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(0, 12164, __pyx_L3_error)
/* … */
      if (!values[31]) values[31] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_conf_str = ((PyObject*)values[0]);
    __pyx_v_bind_interface = ((PyObject*)values[1]);
    __pyx_v_username = ((PyObject*)values[2]);
    __pyx_v_password = ((PyObject*)values[3]);
    __pyx_v_token = ((PyObject*)values[4]);
    __pyx_v_oidc_auth = values[5];
    __pyx_v_bearer_token_provider = values[6];
    __pyx_v_token_x = ((PyObject*)values[7]);
    __pyx_v_token_y = ((PyObject*)values[8]);
    __pyx_v_auth_timeout = values[9];
    __pyx_v_tls_verify = values[10];
    __pyx_v_tls_ca = values[11];
    __pyx_v_tls_roots = values[12];
    __pyx_v_tls_roots_password = ((PyObject*)values[13]);
    __pyx_v_max_buf_size = values[14];
    __pyx_v_retry_timeout = values[15];
    __pyx_v_retry_max_backoff = values[16];
    __pyx_v_request_min_throughput = values[17];
    __pyx_v_request_timeout = values[18];
    __pyx_v_auto_flush = values[19];
    __pyx_v_auto_flush_rows = values[20];
    __pyx_v_auto_flush_bytes = values[21];
    __pyx_v_auto_flush_interval = values[22];
    __pyx_v_max_datagram_size = values[23];
    __pyx_v_multicast_ttl = values[24];
    __pyx_v_qwp_ws_progress = values[25];
    __pyx_v_error_handler = values[26];
    __pyx_v_connection_listener = values[27];
    __pyx_v_connection_event_inbox_capacity = values[28];
    __pyx_v_protocol_version = values[29];
    __pyx_v_init_buf_size = values[30];
    __pyx_v_max_name_len = values[31];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("from_conf", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 12164, __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.Sender.from_conf", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_conf_str), (&PyUnicode_Type), 1, "conf_str", 1))) __PYX_ERR(0, 12166, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_bind_interface), (&PyUnicode_Type), 1, "bind_interface", 1))) __PYX_ERR(0, 12168, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_username), (&PyUnicode_Type), 1, "username", 1))) __PYX_ERR(0, 12169, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_password), (&PyUnicode_Type), 1, "password", 1))) __PYX_ERR(0, 12170, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 1, "token", 1))) __PYX_ERR(0, 12171, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token_x), (&PyUnicode_Type), 1, "token_x", 1))) __PYX_ERR(0, 12174, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token_y), (&PyUnicode_Type), 1, "token_y", 1))) __PYX_ERR(0, 12175, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tls_roots_password), (&PyUnicode_Type), 1, "tls_roots_password", 1))) __PYX_ERR(0, 12180, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_8from_conf(__pyx_v_conf_str, __pyx_v_bind_interface, __pyx_v_username, __pyx_v_password, __pyx_v_token, __pyx_v_oidc_auth, __pyx_v_bearer_token_provider, __pyx_v_token_x, __pyx_v_token_y, __pyx_v_auth_timeout, __pyx_v_tls_verify, __pyx_v_tls_ca, __pyx_v_tls_roots, __pyx_v_tls_roots_password, __pyx_v_max_buf_size, __pyx_v_retry_timeout, __pyx_v_retry_max_backoff, __pyx_v_request_min_throughput, __pyx_v_request_timeout, __pyx_v_auto_flush, __pyx_v_auto_flush_rows, __pyx_v_auto_flush_bytes, __pyx_v_auto_flush_interval, __pyx_v_max_datagram_size, __pyx_v_multicast_ttl, __pyx_v_qwp_ws_progress, __pyx_v_error_handler, __pyx_v_connection_listener, __pyx_v_connection_event_inbox_capacity, __pyx_v_protocol_version, __pyx_v_init_buf_size, __pyx_v_max_name_len);
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_max_name_len, Py_None) < (0)) __PYX_ERR(0, 12164, __pyx_L1_error)
 12199:         """
 12200:         Construct a sender from a :ref:`configuration string <sender_conf>`.
 12201: 
 12202:         The additional arguments are used to specify additional parameters
 12203:         which are not present in the configuration string.
 12204: 
 12205:         Note that any parameters already present in the configuration string
 12206:         cannot be overridden.
 12207: 
 12208:         ``oidc_auth`` attaches a native rotating OIDC token provider — see
 12209:         :class:`questdb.auth.OidcDeviceAuth` and the :ref:`oidc_auth` guide. It
 12210:         is a Python argument only, with no configuration-string equivalent, and
 12211:         is mutually exclusive with ``token``, ``username`` and ``password``.
 12212:         Use ``https::`` or ``wss::``: over plain ``http::`` or ``ws::`` to a
 12213:         non-loopback host the token is sent in cleartext.
 12214:         Call :meth:`~questdb.auth.OidcDeviceAuth.sign_in` before the first
 12215:         flush: connect and reconnect load or silently refresh a token but never
 12216:         start an interactive device flow. Supported on HTTP(S) and
 12217:         QWP/WebSocket; TCP and UDP are rejected.
 12218: 
 12219:         ``bearer_token_provider`` attaches a rotating Bearer-token provider
 12220:         instead: a :class:`questdb.auth.RefreshingTokenProvider` around a token
 12221:         source of your own, a callable returning a token, or an object with
 12222:         ``token()`` and an optional ``on_rejected()`` -- see
 12223:         :ref:`refreshing_token_provider`. It is mutually exclusive with
 12224:         ``oidc_auth``, ``token``, ``username`` and ``password``. It runs
 12225:         inside every ILP/HTTP flush, and inside a connect the call waits for
 12226:         such as :meth:`establish <questdb.Sender.establish>`, where neither
 12227:         it nor a Python signal handler may use this sender; see
 12228:         :ref:`token_provider_reentrancy`.
 12229:         """
 12230: 
+12231:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 12232:         cdef object protocol
 12233:         cdef Sender sender
 12234:         cdef str synthetic_conf_str
 12235:         cdef line_sender_utf8 c_synthetic_conf_str
 12236:         cdef dict params
+12237:         cdef qdb_pystr_buf* b = qdb_pystr_buf_new()
  __pyx_v_b = qdb_pystr_buf_new();
+12238:         try:
  /*try:*/ {
+12239:             protocol, params = parse_conf_str(b, conf_str)
    __pyx_t_1 = __pyx_f_7questdb_7_client_parse_conf_str(__pyx_v_b, __pyx_v_conf_str); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12239, __pyx_L4_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 != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 12239, __pyx_L4_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0);
        __Pyx_INCREF(__pyx_t_2);
        __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1);
        __Pyx_INCREF(__pyx_t_3);
      } else {
        __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12239, __pyx_L4_error)
        __Pyx_XGOTREF(__pyx_t_2);
        __pyx_t_3 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12239, __pyx_L4_error)
        __Pyx_XGOTREF(__pyx_t_3);
      }
      #else
      __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12239, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12239, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_3);
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12239, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_5 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_4);
      index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L6_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_2);
      index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L6_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_3);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < (0)) __PYX_ERR(0, 12239, __pyx_L4_error)
      __pyx_t_5 = NULL;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      goto __pyx_L7_unpacking_done;
      __pyx_L6_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_5 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 12239, __pyx_L4_error)
      __pyx_L7_unpacking_done:;
    }
    if (!(likely(PyDict_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_3))) __PYX_ERR(0, 12239, __pyx_L4_error)
    __pyx_v_protocol = __pyx_t_2;
    __pyx_t_2 = 0;
    __pyx_v_params = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
+12240:             _tp_reject_conf_keys(params)
    __pyx_t_6 = __pyx_f_7questdb_7_client__tp_reject_conf_keys(__pyx_v_params); if (unlikely(__pyx_t_6 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12240, __pyx_L4_error)
 12241: 
+12242:             addr = params.get('addr')
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 12242, __pyx_L4_error)
    }
    __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_addr, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12242, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_addr = __pyx_t_1;
    __pyx_t_1 = 0;
+12243:             if addr is None:
    __pyx_t_7 = (__pyx_v_addr == Py_None);
    if (unlikely(__pyx_t_7)) {
/* … */
    }
+12244:                 raise QuestDBError(
      __pyx_t_3 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12244, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
+12245:                     QuestDBErrorCode.ConfigError,
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12245, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 12245, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_9 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
        assert(__pyx_t_3);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
        __pyx_t_9 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_8, __pyx_mstate_global->__pyx_kp_u_Missing_addr_parameter_in_config};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __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_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12244, __pyx_L4_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(0, 12244, __pyx_L4_error)
 12246:                     'Missing "addr" parameter in config string')
 12247: 
 12248:             # add fields to the dictionary, so long as they aren't already
 12249:             # present in the params dictionary
+12250:             for override_key, override_value in {
    __pyx_t_10 = 0;
/* … */
    while (1) {
/* … */
      __Pyx_XDECREF_SET(__pyx_v_override_key, __pyx_t_8);
      __pyx_t_8 = 0;
      __Pyx_XDECREF_SET(__pyx_v_override_value, __pyx_t_2);
      __pyx_t_2 = 0;
+12251:                 'bind_interface': bind_interface,
    __pyx_t_2 = __Pyx_PyDict_NewPresized(26); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12251, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_bind_interface, __pyx_v_bind_interface) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
/* … */
    __pyx_t_8 = __Pyx_dict_iterator(__pyx_t_2, 1, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_11), (&__pyx_t_12)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 12251, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_1);
    __pyx_t_1 = __pyx_t_8;
    __pyx_t_8 = 0;
/* … */
      __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_11, &__pyx_t_10, &__pyx_t_8, &__pyx_t_2, NULL, __pyx_t_12);
      if (unlikely(__pyx_t_13 == 0)) break;
      if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 12251, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GOTREF(__pyx_t_2);
+12252:                 'username': username,
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_username, __pyx_v_username) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12253:                 'password': password,
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_password, __pyx_v_password) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12254:                 'token': token,
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_token, __pyx_v_token) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12255:                 'token_x': token_x,
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_token_x, __pyx_v_token_x) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12256:                 'token_y': token_y,
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_token_y, __pyx_v_token_y) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12257:                 'auth_timeout': auth_timeout,
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_auth_timeout, __pyx_v_auth_timeout) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12258:                 'tls_verify': tls_verify,
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_tls_verify, __pyx_v_tls_verify) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12259:                 'tls_ca': tls_ca,
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_tls_ca, __pyx_v_tls_ca) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12260:                 'tls_roots': tls_roots,
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_tls_roots, __pyx_v_tls_roots) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12261:                 'tls_roots_password': tls_roots_password,
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_tls_roots_password, __pyx_v_tls_roots_password) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12262:                 'max_buf_size': max_buf_size,
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_max_buf_size, __pyx_v_max_buf_size) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12263:                 'retry_timeout': retry_timeout,
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_retry_timeout, __pyx_v_retry_timeout) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12264:                 'retry_max_backoff_millis': retry_max_backoff,
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_retry_max_backoff_millis, __pyx_v_retry_max_backoff) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12265:                 'request_min_throughput': request_min_throughput,
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_request_min_throughput, __pyx_v_request_min_throughput) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12266:                 'request_timeout': request_timeout,
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_request_timeout, __pyx_v_request_timeout) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12267:                 'auto_flush': auto_flush,
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_auto_flush, __pyx_v_auto_flush) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12268:                 'auto_flush_rows': auto_flush_rows,
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_auto_flush_rows, __pyx_v_auto_flush_rows) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12269:                 'auto_flush_bytes': auto_flush_bytes,
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes, __pyx_v_auto_flush_bytes) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12270:                 'auto_flush_interval': auto_flush_interval,
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_auto_flush_interval, __pyx_v_auto_flush_interval) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12271:                 'max_datagram_size': max_datagram_size,
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_max_datagram_size, __pyx_v_max_datagram_size) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12272:                 'multicast_ttl': multicast_ttl,
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_multicast_ttl, __pyx_v_multicast_ttl) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12273:                 'qwp_ws_progress': qwp_ws_progress,
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_qwp_ws_progress, __pyx_v_qwp_ws_progress) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12274:                 'protocol_version': protocol_version,
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_protocol_version, __pyx_v_protocol_version) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12275:                 'init_buf_size': init_buf_size,
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_init_buf_size, __pyx_v_init_buf_size) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
+12276:                 'max_name_len': max_name_len,
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_max_name_len, __pyx_v_max_name_len) < (0)) __PYX_ERR(0, 12251, __pyx_L4_error)
 12277:             }.items():
+12278:                 if override_value is None:
      __pyx_t_7 = (__pyx_v_override_value == Py_None);
      if (__pyx_t_7) {
/* … */
      }
+12279:                     continue
        goto __pyx_L9_continue;
+12280:                 if override_key in params:
      if (unlikely(__pyx_v_params == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 12280, __pyx_L4_error)
      }
      __pyx_t_7 = (__Pyx_PyDict_ContainsTF(__pyx_v_override_key, __pyx_v_params, Py_EQ)); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 12280, __pyx_L4_error)
      if (unlikely(__pyx_t_7)) {
/* … */
      }
+12281:                     raise ValueError(
        __pyx_t_8 = NULL;
+12282:                         f'"{override_key}" is already present in the conf_str '
        __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_v_override_key, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12282, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_14[0] = __pyx_mstate_global->__pyx_kp_u__26;
        __pyx_t_14[1] = __pyx_t_3;
        __pyx_t_14[2] = __pyx_mstate_global->__pyx_kp_u_is_already_present_in_the_conf;
        __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_14, 3, 1 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + 62, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3));
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12282, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_9 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_4};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__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_2)) __PYX_ERR(0, 12281, __pyx_L4_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(0, 12281, __pyx_L4_error)
 12283:                         'and cannot be overridden.')
+12284:                 params[override_key] = override_value
      if (unlikely(__pyx_v_params == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 12284, __pyx_L4_error)
      }
      if (unlikely((PyDict_SetItem(__pyx_v_params, __pyx_v_override_key, __pyx_v_override_value) < 0))) __PYX_ERR(0, 12284, __pyx_L4_error)
      __pyx_L9_continue:;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 12285: 
+12286:             sender = Sender.__new__(Sender)
    __pyx_t_1 = ((PyObject *)__pyx_tp_new_7questdb_7_client_Sender(((PyTypeObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender), __pyx_mstate_global->__pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12286, __pyx_L4_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_1);
    __pyx_v_sender = ((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_t_1);
    __pyx_t_1 = 0;
 12287: 
 12288:             python_handled_keys = {
+12289:                 'addr',
    __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12289, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_addr) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_bind_interface) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_username) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_password) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_token) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_token_x) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_token_y) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auth_timeout) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_tls_verify) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_tls_ca) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_tls_roots) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_tls_roots_password) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_max_buf_size) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_retry_timeout) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_retry_max_backoff_millis) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_request_min_throughput) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_request_timeout) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_rows) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_auto_flush_interval) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_max_datagram_size) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_multicast_ttl) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_qwp_ws_progress) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_protocol_version) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_init_buf_size) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error)
    if (PySet_Add(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_max_name_len) < (0)) __PYX_ERR(0, 12289, __pyx_L4_error)
    __pyx_v_python_handled_keys = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
 12290:                 'bind_interface',
 12291:                 'username',
 12292:                 'password',
 12293:                 'token',
 12294:                 'token_x',
 12295:                 'token_y',
 12296:                 'auth_timeout',
 12297:                 'tls_verify',
 12298:                 'tls_ca',
 12299:                 'tls_roots',
 12300:                 'tls_roots_password',
 12301:                 'max_buf_size',
 12302:                 'retry_timeout',
 12303:                 'retry_max_backoff_millis',
 12304:                 'request_min_throughput',
 12305:                 'request_timeout',
 12306:                 'auto_flush',
 12307:                 'auto_flush_rows',
 12308:                 'auto_flush_bytes',
 12309:                 'auto_flush_interval',
 12310:                 'max_datagram_size',
 12311:                 'multicast_ttl',
 12312:                 'qwp_ws_progress',
 12313:                 'protocol_version',
 12314:                 'init_buf_size',
 12315:                 'max_name_len',
 12316:             }
+12317:             synthetic_params = {'addr': addr}
    __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12317, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_addr, __pyx_v_addr) < (0)) __PYX_ERR(0, 12317, __pyx_L4_error)
    __pyx_v_synthetic_params = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
+12318:             if protocol in (Protocol.Ws, Protocol.Wss):
    __Pyx_INCREF(__pyx_v_protocol);
    __pyx_t_1 = __pyx_v_protocol;
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_Protocol); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12318, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_Ws); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12318, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12318, __pyx_L4_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_15 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 12318, __pyx_L4_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (!__pyx_t_15) {
    } else {
      __pyx_t_7 = __pyx_t_15;
      goto __pyx_L14_bool_binop_done;
    }
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_Protocol); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12318, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_Wss); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12318, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12318, __pyx_L4_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_15 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 12318, __pyx_L4_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_7 = __pyx_t_15;
    __pyx_L14_bool_binop_done:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_15 = __pyx_t_7;
    if (__pyx_t_15) {
/* … */
    }
+12319:                 for key, value in params.items():
      __pyx_t_11 = 0;
      if (unlikely(__pyx_v_params == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
        __PYX_ERR(0, 12319, __pyx_L4_error)
      }
      __pyx_t_2 = __Pyx_dict_iterator(__pyx_v_params, 1, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_10), (&__pyx_t_12)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12319, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_XDECREF(__pyx_t_1);
      __pyx_t_1 = __pyx_t_2;
      __pyx_t_2 = 0;
      while (1) {
        __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_10, &__pyx_t_11, &__pyx_t_2, &__pyx_t_4, NULL, __pyx_t_12);
        if (unlikely(__pyx_t_13 == 0)) break;
        if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 12319, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_2);
        __pyx_t_2 = 0;
        __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_4);
        __pyx_t_4 = 0;
+12320:                     if key not in python_handled_keys:
        __pyx_t_15 = (__Pyx_PySet_ContainsTF(__pyx_v_key, __pyx_v_python_handled_keys, Py_NE)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 12320, __pyx_L4_error)
        if (__pyx_t_15) {
/* … */
        }
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+12321:                         synthetic_params[key] = value
          if (unlikely((PyDict_SetItem(__pyx_v_synthetic_params, __pyx_v_key, __pyx_v_value) < 0))) __PYX_ERR(0, 12321, __pyx_L4_error)
+12322:             synthetic_conf_str = protocol.tag + '::' + ''.join(
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_protocol, __pyx_mstate_global->__pyx_n_u_tag); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12322, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = PyNumber_Add(__pyx_t_1, __pyx_mstate_global->__pyx_kp_u__37); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12322, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
    __pyx_t_2 = __Pyx_Generator_GetInlinedResult(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12322, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__7, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12322, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyNumber_Add(__pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12322, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (!(likely(PyUnicode_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_2))) __PYX_ERR(0, 12322, __pyx_L4_error)
    __pyx_v_synthetic_conf_str = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;
+12323:                 f'{key}={conf_str_value(value)};'
static PyObject *__pyx_pf_7questdb_7_client_6Sender_9from_conf_genexpr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
  struct __pyx_obj_7questdb_7_client___pyx_scope_struct_17_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_17_genexpr *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_17_genexpr(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_17_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_17_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 12323, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_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_6Sender_9from_conf_2generator13, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[13]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_from_conf_locals_genexpr, __pyx_mstate_global->__pyx_n_u_questdb__client); if (unlikely(!gen)) __PYX_ERR(0, 12323, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client.Sender.from_conf.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_6Sender_9from_conf_2generator13(__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(0, 12323, __pyx_L1_error)
  __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 12323, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_r);
/* … */
    __pyx_t_6 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_key, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12323, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = __pyx_f_7questdb_7_client_conf_str_value(__pyx_cur_scope->__pyx_v_value); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12323, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 12323, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_9[0] = __pyx_t_6;
    __pyx_t_9[1] = __pyx_mstate_global->__pyx_kp_u__36;
    __pyx_t_9[2] = __pyx_t_8;
    __pyx_t_9[3] = __pyx_mstate_global->__pyx_kp_u__29;
    __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_9, 4, __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6) + 1 * 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8));
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12323, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(__Pyx_ListComp_Append(__pyx_r, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 12323, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  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_1 = __pyx_pf_7questdb_7_client_6Sender_9from_conf_genexpr(NULL, __pyx_v_synthetic_params); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12323, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_17_genexpr {
  PyObject_HEAD
  PyObject *__pyx_genexpr_arg_0;
  PyObject *__pyx_v_key;
  PyObject *__pyx_v_value;
};

+12324:                 for key, value in synthetic_params.items())
  __pyx_t_2 = 0;
  if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(0, 12324, __pyx_L1_error) }
  __pyx_t_5 = __Pyx_dict_iterator(__pyx_cur_scope->__pyx_genexpr_arg_0, 1, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_5;
  __pyx_t_5 = 0;
  while (1) {
    __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, &__pyx_t_5, &__pyx_t_6, NULL, __pyx_t_4);
    if (unlikely(__pyx_t_7 == 0)) break;
    if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 12324, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_key);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_key, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    __pyx_t_5 = 0;
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_value);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_value, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_6);
    __pyx_t_6 = 0;
+12325:             str_to_utf8(b, <PyObject*>synthetic_conf_str, &c_synthetic_conf_str)
    __pyx_t_6 = __pyx_f_7questdb_7_client_str_to_utf8(__pyx_v_b, ((PyObject *)__pyx_v_synthetic_conf_str), (&__pyx_v_c_synthetic_conf_str)); if (unlikely(__pyx_t_6 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12325, __pyx_L4_error)
+12326:             sender._opts = line_sender_opts_from_conf(
    __pyx_v_sender->_opts = line_sender_opts_from_conf(__pyx_v_c_synthetic_conf_str, (&__pyx_v_err));
 12327:                 c_synthetic_conf_str, &err)
+12328:             if sender._opts == NULL:
    __pyx_t_15 = (__pyx_v_sender->_opts == NULL);
    if (unlikely(__pyx_t_15)) {
/* … */
    }
+12329:                 raise c_err_to_py(err)
      __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12329, __pyx_L4_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(0, 12329, __pyx_L4_error)
 12330: 
+12331:             sender._set_sender_fields(
    __pyx_t_6 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_sender->__pyx_vtab)->_set_sender_fields(__pyx_v_sender, __pyx_v_b, __pyx_v_protocol, ((PyObject*)__pyx_t_2), ((PyObject*)__pyx_t_1), ((PyObject*)__pyx_t_4), ((PyObject*)__pyx_t_8), __pyx_v_oidc_auth, __pyx_v_bearer_token_provider, ((PyObject*)__pyx_t_3), ((PyObject*)__pyx_t_16), __pyx_t_17, __pyx_t_18, __pyx_t_19, __pyx_t_20, __pyx_t_21, __pyx_t_22, __pyx_t_23, __pyx_t_24, __pyx_t_25, __pyx_t_26, __pyx_t_27, __pyx_t_28, __pyx_t_29, __pyx_t_30, __pyx_t_31, __pyx_t_32, __pyx_t_33, __pyx_t_34, __pyx_v_error_handler, __pyx_v_connection_listener, __pyx_v_connection_event_inbox_capacity, __pyx_t_35, __pyx_t_36); if (unlikely(__pyx_t_6 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12331, __pyx_L4_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
    __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
    __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
    __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
    __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
    __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
    __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
    __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
    __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
    __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
    __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0;
    __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
    __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 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_DECREF(__pyx_t_34); __pyx_t_34 = 0;
    __Pyx_DECREF(__pyx_t_35); __pyx_t_35 = 0;
    __Pyx_DECREF(__pyx_t_36); __pyx_t_36 = 0;
 12332:                 b,
 12333:                 protocol,
+12334:                 params.get('bind_interface'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 12334, __pyx_L4_error)
    }
    __pyx_t_2 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_bind_interface, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12334, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (!(likely(PyUnicode_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_2))) __PYX_ERR(0, 12334, __pyx_L4_error)
+12335:                 params.get('username'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 12335, __pyx_L4_error)
    }
    __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_username, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12335, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(0, 12335, __pyx_L4_error)
+12336:                 params.get('password'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 12336, __pyx_L4_error)
    }
    __pyx_t_4 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_password, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12336, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (!(likely(PyUnicode_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_4))) __PYX_ERR(0, 12336, __pyx_L4_error)
+12337:                 params.get('token'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 12337, __pyx_L4_error)
    }
    __pyx_t_8 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_token, Py_None); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 12337, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (!(likely(PyUnicode_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_8))) __PYX_ERR(0, 12337, __pyx_L4_error)
 12338:                 oidc_auth,
 12339:                 bearer_token_provider,
+12340:                 params.get('token_x'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 12340, __pyx_L4_error)
    }
    __pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_token_x, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12340, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (!(likely(PyUnicode_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_3))) __PYX_ERR(0, 12340, __pyx_L4_error)
+12341:                 params.get('token_y'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 12341, __pyx_L4_error)
    }
    __pyx_t_16 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_token_y, Py_None); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 12341, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_16);
    if (!(likely(PyUnicode_CheckExact(__pyx_t_16))||((__pyx_t_16) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_16))) __PYX_ERR(0, 12341, __pyx_L4_error)
+12342:                 params.get('auth_timeout'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 12342, __pyx_L4_error)
    }
    __pyx_t_17 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_auth_timeout, Py_None); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12342, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_17);
+12343:                 params.get('tls_verify'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 12343, __pyx_L4_error)
    }
    __pyx_t_18 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_tls_verify, Py_None); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 12343, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_18);
+12344:                 params.get('tls_ca'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 12344, __pyx_L4_error)
    }
    __pyx_t_19 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_tls_ca, Py_None); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 12344, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_19);
+12345:                 params.get('tls_roots'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 12345, __pyx_L4_error)
    }
    __pyx_t_20 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_tls_roots, Py_None); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 12345, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_20);
+12346:                 params.get('tls_roots_password'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 12346, __pyx_L4_error)
    }
    __pyx_t_21 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_tls_roots_password, Py_None); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 12346, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_21);
+12347:                 params.get('max_buf_size'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 12347, __pyx_L4_error)
    }
    __pyx_t_22 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_max_buf_size, Py_None); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 12347, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_22);
+12348:                 params.get('retry_timeout'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 12348, __pyx_L4_error)
    }
    __pyx_t_23 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_retry_timeout, Py_None); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 12348, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_23);
+12349:                 params.get('retry_max_backoff_millis'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 12349, __pyx_L4_error)
    }
    __pyx_t_24 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_retry_max_backoff_millis, Py_None); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 12349, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_24);
+12350:                 params.get('request_min_throughput'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 12350, __pyx_L4_error)
    }
    __pyx_t_25 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_request_min_throughput, Py_None); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 12350, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_25);
+12351:                 params.get('request_timeout'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 12351, __pyx_L4_error)
    }
    __pyx_t_26 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_request_timeout, Py_None); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 12351, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_26);
+12352:                 params.get('auto_flush'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 12352, __pyx_L4_error)
    }
    __pyx_t_27 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_auto_flush, Py_None); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 12352, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_27);
+12353:                 params.get('auto_flush_rows'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 12353, __pyx_L4_error)
    }
    __pyx_t_28 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_auto_flush_rows, Py_None); if (unlikely(!__pyx_t_28)) __PYX_ERR(0, 12353, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_28);
+12354:                 params.get('auto_flush_bytes'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 12354, __pyx_L4_error)
    }
    __pyx_t_29 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes, Py_None); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 12354, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_29);
+12355:                 params.get('auto_flush_interval'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 12355, __pyx_L4_error)
    }
    __pyx_t_30 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_auto_flush_interval, Py_None); if (unlikely(!__pyx_t_30)) __PYX_ERR(0, 12355, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_30);
+12356:                 params.get('max_datagram_size'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 12356, __pyx_L4_error)
    }
    __pyx_t_31 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_max_datagram_size, Py_None); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 12356, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_31);
+12357:                 params.get('multicast_ttl'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 12357, __pyx_L4_error)
    }
    __pyx_t_32 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_multicast_ttl, Py_None); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 12357, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_32);
+12358:                 params.get('protocol_version'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 12358, __pyx_L4_error)
    }
    __pyx_t_33 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_protocol_version, Py_None); if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 12358, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_33);
+12359:                 params.get('qwp_ws_progress'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 12359, __pyx_L4_error)
    }
    __pyx_t_34 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_qwp_ws_progress, Py_None); if (unlikely(!__pyx_t_34)) __PYX_ERR(0, 12359, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_34);
 12360:                 error_handler,
 12361:                 connection_listener,
 12362:                 connection_event_inbox_capacity,
+12363:                 params.get('init_buf_size'),
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 12363, __pyx_L4_error)
    }
    __pyx_t_35 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_init_buf_size, Py_None); if (unlikely(!__pyx_t_35)) __PYX_ERR(0, 12363, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_35);
+12364:                 params.get('max_name_len'))
    if (unlikely(__pyx_v_params == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(0, 12364, __pyx_L4_error)
    }
    __pyx_t_36 = __Pyx_PyDict_GetItemDefault(__pyx_v_params, __pyx_mstate_global->__pyx_n_u_max_name_len, Py_None); if (unlikely(!__pyx_t_36)) __PYX_ERR(0, 12364, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_36);
 12365: 
+12366:             return sender
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_sender);
    __pyx_r = ((PyObject *)__pyx_v_sender);
    goto __pyx_L3_return;
  }
 12367:         finally:
+12368:             qdb_pystr_buf_free(b)
  /*finally:*/ {
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_38 = 0; __pyx_t_39 = 0; __pyx_t_40 = 0; __pyx_t_41 = 0; __pyx_t_42 = 0; __pyx_t_43 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __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;
      __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
      __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
      __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
      __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
      __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
      __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
      __Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
      __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
      __Pyx_XDECREF(__pyx_t_28); __pyx_t_28 = 0;
      __Pyx_XDECREF(__pyx_t_29); __pyx_t_29 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_30); __pyx_t_30 = 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_35); __pyx_t_35 = 0;
      __Pyx_XDECREF(__pyx_t_36); __pyx_t_36 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_41, &__pyx_t_42, &__pyx_t_43);
      if ( unlikely(__Pyx_GetException(&__pyx_t_38, &__pyx_t_39, &__pyx_t_40) < 0)) __Pyx_ErrFetch(&__pyx_t_38, &__pyx_t_39, &__pyx_t_40);
      __Pyx_XGOTREF(__pyx_t_38);
      __Pyx_XGOTREF(__pyx_t_39);
      __Pyx_XGOTREF(__pyx_t_40);
      __Pyx_XGOTREF(__pyx_t_41);
      __Pyx_XGOTREF(__pyx_t_42);
      __Pyx_XGOTREF(__pyx_t_43);
      __pyx_t_12 = __pyx_lineno; __pyx_t_13 = __pyx_clineno; __pyx_t_37 = __pyx_filename;
      {
        qdb_pystr_buf_free(__pyx_v_b);
      }
      __Pyx_XGIVEREF(__pyx_t_41);
      __Pyx_XGIVEREF(__pyx_t_42);
      __Pyx_XGIVEREF(__pyx_t_43);
      __Pyx_ExceptionReset(__pyx_t_41, __pyx_t_42, __pyx_t_43);
      __Pyx_XGIVEREF(__pyx_t_38);
      __Pyx_XGIVEREF(__pyx_t_39);
      __Pyx_XGIVEREF(__pyx_t_40);
      __Pyx_ErrRestore(__pyx_t_38, __pyx_t_39, __pyx_t_40);
      __pyx_t_38 = 0; __pyx_t_39 = 0; __pyx_t_40 = 0; __pyx_t_41 = 0; __pyx_t_42 = 0; __pyx_t_43 = 0;
      __pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_13; __pyx_filename = __pyx_t_37;
      goto __pyx_L1_error;
    }
    __pyx_L3_return: {
      __pyx_t_43 = __pyx_r;
      __pyx_r = 0;
      qdb_pystr_buf_free(__pyx_v_b);
      __pyx_r = __pyx_t_43;
      __pyx_t_43 = 0;
      goto __pyx_L0;
    }
  }
 12369: 
+12370:     @staticmethod
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_11from_env(CYTHON_UNUSED 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_6Sender_10from_env, "\n        Construct a sender from the ``QDB_CLIENT_CONF`` environment variable.\n\n        The environment variable must be set to a valid\n        :ref:`configuration string <sender_conf>`.\n\n        The additional arguments are used to specify additional parameters\n        which are not present in the configuration string.\n\n        Note that any parameters already present in the configuration string\n        cannot be overridden.\n\n        ``oidc_auth`` attaches a native rotating OIDC token provider \342\200\224 see\n        :class:`questdb.auth.OidcDeviceAuth` and the :ref:`oidc_auth` guide.\n        ``bearer_token_provider`` attaches a rotating Bearer-token provider\n        instead: a :class:`questdb.auth.RefreshingTokenProvider` around a token\n        source of your own, a callable returning a token, or an object with\n        ``token()`` and an optional ``on_rejected()`` -- see\n        :ref:`refreshing_token_provider`. It runs inside every ILP/HTTP\n        flush, and inside a connect the call waits for such as\n        :meth:`establish <questdb.Sender.establish>`, where neither it nor a\n        Python signal handler may use this sender; see\n        :ref:`token_provider_reentrancy`.\n        Neither has a configuration-string equivalent, so a token provider\n        must be supplied here rather than through ``QDB_CLIENT_CONF``. They\n        are mutually exclusive with each other and with ``token``,\n        ``username`` and ``password``.\n        Use ``https::`` or ``wss::``: over plain ``http::`` or ``ws::`` to a\n        non-loopback host the token is sent in cleartext.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_11from_env = {"from_env", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_11from_env, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_10from_env};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_11from_env(CYTHON_UNUSED 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_bind_interface = 0;
  PyObject *__pyx_v_username = 0;
  PyObject *__pyx_v_password = 0;
  PyObject *__pyx_v_token = 0;
  PyObject *__pyx_v_oidc_auth = 0;
  PyObject *__pyx_v_bearer_token_provider = 0;
  PyObject *__pyx_v_token_x = 0;
  PyObject *__pyx_v_token_y = 0;
  PyObject *__pyx_v_auth_timeout = 0;
  PyObject *__pyx_v_tls_verify = 0;
  PyObject *__pyx_v_tls_ca = 0;
  PyObject *__pyx_v_tls_roots = 0;
  PyObject *__pyx_v_tls_roots_password = 0;
  PyObject *__pyx_v_max_buf_size = 0;
  PyObject *__pyx_v_retry_timeout = 0;
  PyObject *__pyx_v_retry_max_backoff = 0;
  PyObject *__pyx_v_request_min_throughput = 0;
  PyObject *__pyx_v_request_timeout = 0;
  PyObject *__pyx_v_auto_flush = 0;
  PyObject *__pyx_v_auto_flush_rows = 0;
  PyObject *__pyx_v_auto_flush_bytes = 0;
  PyObject *__pyx_v_auto_flush_interval = 0;
  PyObject *__pyx_v_max_datagram_size = 0;
  PyObject *__pyx_v_multicast_ttl = 0;
  PyObject *__pyx_v_qwp_ws_progress = 0;
  PyObject *__pyx_v_error_handler = 0;
  PyObject *__pyx_v_connection_listener = 0;
  PyObject *__pyx_v_connection_event_inbox_capacity = 0;
  PyObject *__pyx_v_protocol_version = 0;
  PyObject *__pyx_v_init_buf_size = 0;
  PyObject *__pyx_v_max_name_len = 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("from_env (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_bind_interface,&__pyx_mstate_global->__pyx_n_u_username,&__pyx_mstate_global->__pyx_n_u_password,&__pyx_mstate_global->__pyx_n_u_token,&__pyx_mstate_global->__pyx_n_u_oidc_auth,&__pyx_mstate_global->__pyx_n_u_bearer_token_provider_2,&__pyx_mstate_global->__pyx_n_u_token_x,&__pyx_mstate_global->__pyx_n_u_token_y,&__pyx_mstate_global->__pyx_n_u_auth_timeout,&__pyx_mstate_global->__pyx_n_u_tls_verify,&__pyx_mstate_global->__pyx_n_u_tls_ca,&__pyx_mstate_global->__pyx_n_u_tls_roots,&__pyx_mstate_global->__pyx_n_u_tls_roots_password,&__pyx_mstate_global->__pyx_n_u_max_buf_size,&__pyx_mstate_global->__pyx_n_u_retry_timeout,&__pyx_mstate_global->__pyx_n_u_retry_max_backoff,&__pyx_mstate_global->__pyx_n_u_request_min_throughput,&__pyx_mstate_global->__pyx_n_u_request_timeout,&__pyx_mstate_global->__pyx_n_u_auto_flush,&__pyx_mstate_global->__pyx_n_u_auto_flush_rows,&__pyx_mstate_global->__pyx_n_u_auto_flush_bytes,&__pyx_mstate_global->__pyx_n_u_auto_flush_interval,&__pyx_mstate_global->__pyx_n_u_max_datagram_size,&__pyx_mstate_global->__pyx_n_u_multicast_ttl,&__pyx_mstate_global->__pyx_n_u_qwp_ws_progress,&__pyx_mstate_global->__pyx_n_u_error_handler,&__pyx_mstate_global->__pyx_n_u_connection_listener,&__pyx_mstate_global->__pyx_n_u_connection_event_inbox_capacity,&__pyx_mstate_global->__pyx_n_u_protocol_version,&__pyx_mstate_global->__pyx_n_u_init_buf_size,&__pyx_mstate_global->__pyx_n_u_max_name_len,0};
  PyObject* values[31] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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(0, 12370, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, 0, __pyx_kwds_len, "from_env", 0) < (0)) __PYX_ERR(0, 12370, __pyx_L3_error)
/* … */
  /* 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_6Sender_10from_env(PyObject *__pyx_v_bind_interface, PyObject *__pyx_v_username, PyObject *__pyx_v_password, PyObject *__pyx_v_token, PyObject *__pyx_v_oidc_auth, PyObject *__pyx_v_bearer_token_provider, PyObject *__pyx_v_token_x, PyObject *__pyx_v_token_y, PyObject *__pyx_v_auth_timeout, PyObject *__pyx_v_tls_verify, PyObject *__pyx_v_tls_ca, PyObject *__pyx_v_tls_roots, PyObject *__pyx_v_tls_roots_password, PyObject *__pyx_v_max_buf_size, PyObject *__pyx_v_retry_timeout, PyObject *__pyx_v_retry_max_backoff, PyObject *__pyx_v_request_min_throughput, PyObject *__pyx_v_request_timeout, PyObject *__pyx_v_auto_flush, PyObject *__pyx_v_auto_flush_rows, PyObject *__pyx_v_auto_flush_bytes, PyObject *__pyx_v_auto_flush_interval, PyObject *__pyx_v_max_datagram_size, PyObject *__pyx_v_multicast_ttl, PyObject *__pyx_v_qwp_ws_progress, PyObject *__pyx_v_error_handler, PyObject *__pyx_v_connection_listener, PyObject *__pyx_v_connection_event_inbox_capacity, PyObject *__pyx_v_protocol_version, PyObject *__pyx_v_init_buf_size, PyObject *__pyx_v_max_name_len) {
  PyObject *__pyx_v_conf_str = 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_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("questdb._client.Sender.from_env", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_conf_str);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_25 = __Pyx_PyDict_NewPresized(31); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 12370, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
/* … */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_11from_env, __Pyx_CYFUNCTION_STATICMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_from_env, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[225])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12370, __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_CyFunction_SetDefaultsKwDict(__pyx_t_4, __pyx_t_25);
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_from_env, __pyx_t_4) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_25 = NULL;
  __Pyx_GetNameInClass(__pyx_t_17, (PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_from_env); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12370, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_25, __pyx_t_17};
    __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_staticmethod, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12370, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_from_env, __pyx_t_4) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 12371:     def from_env(
 12372:             *,
+12373:             str bind_interface=None,
      if (!values[0]) values[0] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
      if (!values[0]) values[0] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_bind_interface, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12374:             str username=None,
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_username, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12375:             str password=None,
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_password, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12376:             str token=None,
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_token, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12377:             object oidc_auth=None,
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_oidc_auth, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12378:             object bearer_token_provider=None,
      if (!values[5]) values[5] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[5]) values[5] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_bearer_token_provider_2, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12379:             str token_x=None,
      if (!values[6]) values[6] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
      if (!values[6]) values[6] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_token_x, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12380:             str token_y=None,
      if (!values[7]) values[7] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
      if (!values[7]) values[7] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_token_y, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12381:             object auth_timeout=None,  # default: 15000 milliseconds
      if (!values[8]) values[8] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[8]) values[8] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_auth_timeout, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12382:             object tls_verify=None,  # default: True
      if (!values[9]) values[9] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[9]) values[9] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_tls_verify, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12383:             object tls_ca=None,  # TLS default: TlsCa.WebpkiAndOsRoots
      if (!values[10]) values[10] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[10]) values[10] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_tls_ca, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12384:             object tls_roots=None,
      if (!values[11]) values[11] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[11]) values[11] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_tls_roots, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12385:             str tls_roots_password=None,
      if (!values[12]) values[12] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
      if (!values[12]) values[12] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_tls_roots_password, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12386:             object max_buf_size=None,  # 100 * 1024 * 1024 - 100MiB
      if (!values[13]) values[13] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[13]) values[13] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_max_buf_size, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12387:             object retry_timeout=None,  # default: 10000 milliseconds
      if (!values[14]) values[14] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[14]) values[14] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_retry_timeout, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12388:             object retry_max_backoff=None,  # default: 1000 milliseconds
      if (!values[15]) values[15] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[15]) values[15] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_retry_max_backoff, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12389:             object request_min_throughput=None, # default: 100 * 1024 - 100KiB/s
      if (!values[16]) values[16] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[16]) values[16] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_request_min_throughput, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12390:             object request_timeout=None,
      if (!values[17]) values[17] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[17]) values[17] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_request_timeout, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12391:             object auto_flush=None,  # Default True
      if (!values[18]) values[18] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[18]) values[18] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_auto_flush, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12392:             object auto_flush_rows=None,  # Default 75000 (HTTP) or 600 (TCP)
      if (!values[19]) values[19] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[19]) values[19] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_auto_flush_rows, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12393:             object auto_flush_bytes=None,  # Default off (90% of the frame cap for ws and wss)
      if (!values[20]) values[20] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[20]) values[20] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12394:             object auto_flush_interval=None,  # Default 1000 milliseconds
      if (!values[21]) values[21] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[21]) values[21] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_auto_flush_interval, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12395:             object max_datagram_size=None,  # Default 1400 for QWP/UDP
      if (!values[22]) values[22] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[22]) values[22] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_max_datagram_size, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12396:             object multicast_ttl=None,  # Default 1 for QWP/UDP
      if (!values[23]) values[23] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[23]) values[23] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_multicast_ttl, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12397:             object qwp_ws_progress=None,  # Default background for QWP/WebSocket
      if (!values[24]) values[24] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[24]) values[24] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_qwp_ws_progress, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12398:             object error_handler=None,
      if (!values[25]) values[25] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[25]) values[25] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_error_handler, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12399:             object connection_listener=None,
      if (!values[26]) values[26] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[27]) values[27] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
/* … */
      if (!values[26]) values[26] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[27]) values[27] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_connection_listener, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_connection_event_inbox_capacity, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
 12400:             object connection_event_inbox_capacity=0,
+12401:             object protocol_version=None,  # Default auto
      if (!values[28]) values[28] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[28]) values[28] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_protocol_version, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12402:             object init_buf_size=None,  # 64KiB
      if (!values[29]) values[29] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[29]) values[29] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_init_buf_size, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
+12403:             object max_name_len=None):  # 127
      if (!values[30]) values[30] = __Pyx_NewRef(((PyObject *)Py_None));
    } else if (unlikely(__pyx_nargs != 0)) {
      goto __pyx_L5_argtuple_error;
    } else {
/* … */
      if (!values[30]) values[30] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_bind_interface = ((PyObject*)values[0]);
    __pyx_v_username = ((PyObject*)values[1]);
    __pyx_v_password = ((PyObject*)values[2]);
    __pyx_v_token = ((PyObject*)values[3]);
    __pyx_v_oidc_auth = values[4];
    __pyx_v_bearer_token_provider = values[5];
    __pyx_v_token_x = ((PyObject*)values[6]);
    __pyx_v_token_y = ((PyObject*)values[7]);
    __pyx_v_auth_timeout = values[8];
    __pyx_v_tls_verify = values[9];
    __pyx_v_tls_ca = values[10];
    __pyx_v_tls_roots = values[11];
    __pyx_v_tls_roots_password = ((PyObject*)values[12]);
    __pyx_v_max_buf_size = values[13];
    __pyx_v_retry_timeout = values[14];
    __pyx_v_retry_max_backoff = values[15];
    __pyx_v_request_min_throughput = values[16];
    __pyx_v_request_timeout = values[17];
    __pyx_v_auto_flush = values[18];
    __pyx_v_auto_flush_rows = values[19];
    __pyx_v_auto_flush_bytes = values[20];
    __pyx_v_auto_flush_interval = values[21];
    __pyx_v_max_datagram_size = values[22];
    __pyx_v_multicast_ttl = values[23];
    __pyx_v_qwp_ws_progress = values[24];
    __pyx_v_error_handler = values[25];
    __pyx_v_connection_listener = values[26];
    __pyx_v_connection_event_inbox_capacity = values[27];
    __pyx_v_protocol_version = values[28];
    __pyx_v_init_buf_size = values[29];
    __pyx_v_max_name_len = values[30];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("from_env", 1, 0, 0, __pyx_nargs); __PYX_ERR(0, 12370, __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.Sender.from_env", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_bind_interface), (&PyUnicode_Type), 1, "bind_interface", 1))) __PYX_ERR(0, 12373, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_username), (&PyUnicode_Type), 1, "username", 1))) __PYX_ERR(0, 12374, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_password), (&PyUnicode_Type), 1, "password", 1))) __PYX_ERR(0, 12375, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 1, "token", 1))) __PYX_ERR(0, 12376, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token_x), (&PyUnicode_Type), 1, "token_x", 1))) __PYX_ERR(0, 12379, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token_y), (&PyUnicode_Type), 1, "token_y", 1))) __PYX_ERR(0, 12380, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tls_roots_password), (&PyUnicode_Type), 1, "tls_roots_password", 1))) __PYX_ERR(0, 12385, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_10from_env(__pyx_v_bind_interface, __pyx_v_username, __pyx_v_password, __pyx_v_token, __pyx_v_oidc_auth, __pyx_v_bearer_token_provider, __pyx_v_token_x, __pyx_v_token_y, __pyx_v_auth_timeout, __pyx_v_tls_verify, __pyx_v_tls_ca, __pyx_v_tls_roots, __pyx_v_tls_roots_password, __pyx_v_max_buf_size, __pyx_v_retry_timeout, __pyx_v_retry_max_backoff, __pyx_v_request_min_throughput, __pyx_v_request_timeout, __pyx_v_auto_flush, __pyx_v_auto_flush_rows, __pyx_v_auto_flush_bytes, __pyx_v_auto_flush_interval, __pyx_v_max_datagram_size, __pyx_v_multicast_ttl, __pyx_v_qwp_ws_progress, __pyx_v_error_handler, __pyx_v_connection_listener, __pyx_v_connection_event_inbox_capacity, __pyx_v_protocol_version, __pyx_v_init_buf_size, __pyx_v_max_name_len);
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_max_name_len, Py_None) < (0)) __PYX_ERR(0, 12370, __pyx_L1_error)
 12404:         """
 12405:         Construct a sender from the ``QDB_CLIENT_CONF`` environment variable.
 12406: 
 12407:         The environment variable must be set to a valid
 12408:         :ref:`configuration string <sender_conf>`.
 12409: 
 12410:         The additional arguments are used to specify additional parameters
 12411:         which are not present in the configuration string.
 12412: 
 12413:         Note that any parameters already present in the configuration string
 12414:         cannot be overridden.
 12415: 
 12416:         ``oidc_auth`` attaches a native rotating OIDC token provider — see
 12417:         :class:`questdb.auth.OidcDeviceAuth` and the :ref:`oidc_auth` guide.
 12418:         ``bearer_token_provider`` attaches a rotating Bearer-token provider
 12419:         instead: a :class:`questdb.auth.RefreshingTokenProvider` around a token
 12420:         source of your own, a callable returning a token, or an object with
 12421:         ``token()`` and an optional ``on_rejected()`` -- see
 12422:         :ref:`refreshing_token_provider`. It runs inside every ILP/HTTP
 12423:         flush, and inside a connect the call waits for such as
 12424:         :meth:`establish <questdb.Sender.establish>`, where neither it nor a
 12425:         Python signal handler may use this sender; see
 12426:         :ref:`token_provider_reentrancy`.
 12427:         Neither has a configuration-string equivalent, so a token provider
 12428:         must be supplied here rather than through ``QDB_CLIENT_CONF``. They
 12429:         are mutually exclusive with each other and with ``token``,
 12430:         ``username`` and ``password``.
 12431:         Use ``https::`` or ``wss::``: over plain ``http::`` or ``ws::`` to a
 12432:         non-loopback host the token is sent in cleartext.
 12433:         """
+12434:         cdef str conf_str = os.environ.get('QDB_CLIENT_CONF')
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_os); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_environ); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12434, __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_QDB_CLIENT_CONF};
    __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(0, 12434, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(0, 12434, __pyx_L1_error)
  __pyx_v_conf_str = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+12435:         if conf_str is None:
  __pyx_t_6 = (__pyx_v_conf_str == ((PyObject*)Py_None));
  if (unlikely(__pyx_t_6)) {
/* … */
  }
+12436:             raise QuestDBError(
    __pyx_t_4 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12436, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
+12437:                 QuestDBErrorCode.ConfigError,
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12437, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_ConfigError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12437, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_5 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
      assert(__pyx_t_4);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
      __pyx_t_5 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_Environment_variable_QDB_CLIENT};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __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_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12436, __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(0, 12436, __pyx_L1_error)
 12438:                 'Environment variable QDB_CLIENT_CONF is not set.')
+12439:         return Sender.from_conf(
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender);
  __Pyx_INCREF(__pyx_t_2);
 12440:             conf_str,
 12441:             bind_interface=bind_interface,
 12442:             username=username,
 12443:             password=password,
 12444:             token=token,
 12445:             oidc_auth=oidc_auth,
 12446:             bearer_token_provider=bearer_token_provider,
 12447:             token_x=token_x,
 12448:             token_y=token_y,
 12449:             auth_timeout=auth_timeout,
 12450:             tls_verify=tls_verify,
 12451:             tls_ca=tls_ca,
 12452:             tls_roots=tls_roots,
 12453:             tls_roots_password=tls_roots_password,
 12454:             max_buf_size=max_buf_size,
 12455:             retry_timeout=retry_timeout,
 12456:             retry_max_backoff=retry_max_backoff,
 12457:             request_min_throughput=request_min_throughput,
 12458:             request_timeout=request_timeout,
 12459:             auto_flush=auto_flush,
 12460:             auto_flush_rows=auto_flush_rows,
 12461:             auto_flush_bytes=auto_flush_bytes,
 12462:             auto_flush_interval=auto_flush_interval,
 12463:             max_datagram_size=max_datagram_size,
 12464:             multicast_ttl=multicast_ttl,
 12465:             qwp_ws_progress=qwp_ws_progress,
 12466:             error_handler=error_handler,
 12467:             connection_listener=connection_listener,
 12468:             connection_event_inbox_capacity=connection_event_inbox_capacity,
 12469:             protocol_version=protocol_version,
 12470:             init_buf_size=init_buf_size,
+12471:             max_name_len=max_name_len)
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 31 : 0)] = {__pyx_t_2, __pyx_v_conf_str};
    __pyx_t_7 = __Pyx_MakeVectorcallBuilderKwds(31); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12439, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_bind_interface, __pyx_v_bind_interface, __pyx_t_7, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 12439, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_username, __pyx_v_username, __pyx_t_7, __pyx_callargs+2, 1) < (0)) __PYX_ERR(0, 12439, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_password, __pyx_v_password, __pyx_t_7, __pyx_callargs+2, 2) < (0)) __PYX_ERR(0, 12439, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_token, __pyx_v_token, __pyx_t_7, __pyx_callargs+2, 3) < (0)) __PYX_ERR(0, 12439, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_oidc_auth, __pyx_v_oidc_auth, __pyx_t_7, __pyx_callargs+2, 4) < (0)) __PYX_ERR(0, 12439, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_bearer_token_provider_2, __pyx_v_bearer_token_provider, __pyx_t_7, __pyx_callargs+2, 5) < (0)) __PYX_ERR(0, 12439, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_token_x, __pyx_v_token_x, __pyx_t_7, __pyx_callargs+2, 6) < (0)) __PYX_ERR(0, 12439, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_token_y, __pyx_v_token_y, __pyx_t_7, __pyx_callargs+2, 7) < (0)) __PYX_ERR(0, 12439, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_auth_timeout, __pyx_v_auth_timeout, __pyx_t_7, __pyx_callargs+2, 8) < (0)) __PYX_ERR(0, 12439, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_tls_verify, __pyx_v_tls_verify, __pyx_t_7, __pyx_callargs+2, 9) < (0)) __PYX_ERR(0, 12439, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_tls_ca, __pyx_v_tls_ca, __pyx_t_7, __pyx_callargs+2, 10) < (0)) __PYX_ERR(0, 12439, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_tls_roots, __pyx_v_tls_roots, __pyx_t_7, __pyx_callargs+2, 11) < (0)) __PYX_ERR(0, 12439, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_tls_roots_password, __pyx_v_tls_roots_password, __pyx_t_7, __pyx_callargs+2, 12) < (0)) __PYX_ERR(0, 12439, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_max_buf_size, __pyx_v_max_buf_size, __pyx_t_7, __pyx_callargs+2, 13) < (0)) __PYX_ERR(0, 12439, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_retry_timeout, __pyx_v_retry_timeout, __pyx_t_7, __pyx_callargs+2, 14) < (0)) __PYX_ERR(0, 12439, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_retry_max_backoff, __pyx_v_retry_max_backoff, __pyx_t_7, __pyx_callargs+2, 15) < (0)) __PYX_ERR(0, 12439, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_request_min_throughput, __pyx_v_request_min_throughput, __pyx_t_7, __pyx_callargs+2, 16) < (0)) __PYX_ERR(0, 12439, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_request_timeout, __pyx_v_request_timeout, __pyx_t_7, __pyx_callargs+2, 17) < (0)) __PYX_ERR(0, 12439, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_auto_flush, __pyx_v_auto_flush, __pyx_t_7, __pyx_callargs+2, 18) < (0)) __PYX_ERR(0, 12439, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_auto_flush_rows, __pyx_v_auto_flush_rows, __pyx_t_7, __pyx_callargs+2, 19) < (0)) __PYX_ERR(0, 12439, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_auto_flush_bytes, __pyx_v_auto_flush_bytes, __pyx_t_7, __pyx_callargs+2, 20) < (0)) __PYX_ERR(0, 12439, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_auto_flush_interval, __pyx_v_auto_flush_interval, __pyx_t_7, __pyx_callargs+2, 21) < (0)) __PYX_ERR(0, 12439, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_max_datagram_size, __pyx_v_max_datagram_size, __pyx_t_7, __pyx_callargs+2, 22) < (0)) __PYX_ERR(0, 12439, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_multicast_ttl, __pyx_v_multicast_ttl, __pyx_t_7, __pyx_callargs+2, 23) < (0)) __PYX_ERR(0, 12439, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_qwp_ws_progress, __pyx_v_qwp_ws_progress, __pyx_t_7, __pyx_callargs+2, 24) < (0)) __PYX_ERR(0, 12439, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_error_handler, __pyx_v_error_handler, __pyx_t_7, __pyx_callargs+2, 25) < (0)) __PYX_ERR(0, 12439, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_connection_listener, __pyx_v_connection_listener, __pyx_t_7, __pyx_callargs+2, 26) < (0)) __PYX_ERR(0, 12439, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_connection_event_inbox_capacity, __pyx_v_connection_event_inbox_capacity, __pyx_t_7, __pyx_callargs+2, 27) < (0)) __PYX_ERR(0, 12439, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_protocol_version, __pyx_v_protocol_version, __pyx_t_7, __pyx_callargs+2, 28) < (0)) __PYX_ERR(0, 12439, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_init_buf_size, __pyx_v_init_buf_size, __pyx_t_7, __pyx_callargs+2, 29) < (0)) __PYX_ERR(0, 12439, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_max_name_len, __pyx_v_max_name_len, __pyx_t_7, __pyx_callargs+2, 30) < (0)) __PYX_ERR(0, 12439, __pyx_L1_error)
    __pyx_t_1 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_from_conf, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_7);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12439, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 12472: 
 12473: 
+12474:     cdef inline object _new_buffer_for_sender(self):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client_6Sender__new_buffer_for_sender(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
  struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buf = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client.Sender._new_buffer_for_sender", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_buf);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+12475:         cdef Buffer buf = Buffer.__new__(Buffer)
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_7questdb_7_client_Buffer(((PyTypeObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer), __pyx_mstate_global->__pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12475, __pyx_L1_error)
  __Pyx_GOTREF((PyObject *)__pyx_t_1);
  __pyx_v_buf = ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_1);
  __pyx_t_1 = 0;
+12476:         buf._impl = line_sender_buffer_new_for_sender(self._impl)
  __pyx_v_buf->_impl = line_sender_buffer_new_for_sender(__pyx_v_self->_impl);
+12477:         buf._b = qdb_pystr_buf_new()
  __pyx_v_buf->_b = qdb_pystr_buf_new();
+12478:         reserve_buffer(buf._impl, self._init_buf_size)
  __pyx_t_2 = __pyx_f_7questdb_7_client_reserve_buffer(__pyx_v_buf->_impl, __pyx_v_self->_init_buf_size); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12478, __pyx_L1_error)
+12479:         buf._init_buf_size = self._init_buf_size
  __pyx_t_3 = __pyx_v_self->_init_buf_size;
  __pyx_v_buf->_init_buf_size = __pyx_t_3;
+12480:         buf._max_name_len = line_sender_get_max_name_len(self._impl)
  __pyx_v_buf->_max_name_len = line_sender_get_max_name_len(__pyx_v_self->_impl);
+12481:         buf._qwp = (
  __pyx_v_buf->_qwp = __pyx_t_4;
+12482:             _is_qwp_udp_protocol(self._c_protocol) or
  __pyx_t_5 = __pyx_f_7questdb_7_client__is_qwp_udp_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 12482, __pyx_L1_error)
  if (!__pyx_t_5) {
  } else {
    __pyx_t_4 = __pyx_t_5;
    goto __pyx_L3_bool_binop_done;
  }
+12483:             _is_qwp_ws_protocol(self._c_protocol))
  __pyx_t_5 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_5 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 12483, __pyx_L1_error)
  __pyx_t_4 = __pyx_t_5;
  __pyx_L3_bool_binop_done:;
+12484:         return buf
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_buf);
  __pyx_r = ((PyObject *)__pyx_v_buf);
  goto __pyx_L0;
 12485: 
+12486:     def new_buffer(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_13new_buffer(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_12new_buffer, "\n        Make a new configured buffer.\n\n        The buffer is set up with the configured `init_buf_size` and\n        `max_name_len`, and matches the sender's protocol.\n\n        Must be called after :func:`Sender.establish` and before\n        :func:`Sender.close`; otherwise raises\n        :class:`QuestDBError` (``InvalidApiCall``).\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_13new_buffer = {"new_buffer", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_13new_buffer, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_12new_buffer};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_13new_buffer(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
) {
  #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("new_buffer (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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("new_buffer", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("new_buffer", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_12new_buffer(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_6Sender_12new_buffer(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
  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.Sender.new_buffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_13new_buffer, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_new_buffer, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[226])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12486, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_new_buffer, __pyx_t_4) < (0)) __PYX_ERR(0, 12486, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 12487:         """
 12488:         Make a new configured buffer.
 12489: 
 12490:         The buffer is set up with the configured `init_buf_size` and
 12491:         `max_name_len`, and matches the sender's protocol.
 12492: 
 12493:         Must be called after :func:`Sender.establish` and before
 12494:         :func:`Sender.close`; otherwise raises
 12495:         :class:`QuestDBError` (``InvalidApiCall``).
 12496:         """
+12497:         self._check_not_in_own_callback('new_buffer')
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_new_buffer, NULL); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12497, __pyx_L1_error)
+12498:         if self._impl == NULL:
  __pyx_t_2 = (__pyx_v_self->_impl == NULL);
  if (__pyx_t_2) {
/* … */
  }
+12499:             if self._opts == NULL:
    __pyx_t_2 = (__pyx_v_self->_opts == NULL);
    if (unlikely(__pyx_t_2)) {
/* … */
    }
+12500:                 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(0, 12500, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
+12501:                     QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12501, __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(0, 12501, __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_new_buffer_can_t_be_called_Sende};
        __pyx_t_3 = __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_3)) __PYX_ERR(0, 12500, __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(0, 12500, __pyx_L1_error)
 12502:                     'new_buffer() can\'t be called: Sender is closed.')
+12503:             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(0, 12503, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
+12504:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12504, __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(0, 12504, __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_new_buffer_can_t_be_called_befor};
      __pyx_t_3 = __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_3)) __PYX_ERR(0, 12503, __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(0, 12503, __pyx_L1_error)
 12505:                 'new_buffer() can\'t be called before establish().')
+12506:         return self._new_buffer_for_sender()
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __pyx_f_7questdb_7_client_6Sender__new_buffer_for_sender(__pyx_v_self); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12506, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 12507: 
+12508:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_13init_buf_size_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Sender_13init_buf_size_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_13init_buf_size___get__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_6Sender_13init_buf_size___get__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client.Sender.init_buf_size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 12509:     def init_buf_size(self) -> int:
 12510:         """The initial capacity of the sender's internal buffer."""
+12511:         return self._init_buf_size
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_FromSize_t(__pyx_v_self->_init_buf_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 12512: 
+12513:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_12max_name_len_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Sender_12max_name_len_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_12max_name_len___get__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_6Sender_12max_name_len___get__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
  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_AddTraceback("questdb._client.Sender.max_name_len.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 12514:     def max_name_len(self) -> int:
 12515:         """Maximum length of a table or column name.
 12516: 
 12517:         Raises :class:`QuestDBError <questdb.QuestDBError>`
 12518:         (``InvalidApiCall``) when read from any thread while this sender is
 12519:         inside a native call such as :func:`Sender.flush`.
 12520:         """
+12521:         self._check_not_in_own_callback('max_name_len', allow_idle_callback=True)
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.allow_idle_callback = 1;
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_max_name_len, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12521, __pyx_L1_error)
+12522:         if self._impl == NULL:
  __pyx_t_3 = (__pyx_v_self->_impl == NULL);
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+12523:             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(0, 12523, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
+12524:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12524, __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(0, 12524, __pyx_L1_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_max_name_len_can_t_be_called_Sen};
      __pyx_t_4 = __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_4)) __PYX_ERR(0, 12523, __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(0, 12523, __pyx_L1_error)
 12525:                 'max_name_len() can\'t be called: Sender is closed.')
+12526:         return line_sender_get_max_name_len(self._impl)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = __Pyx_PyLong_FromSize_t(line_sender_get_max_name_len(__pyx_v_self->_impl)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12526, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
 12527: 
+12528:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_10auto_flush_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Sender_10auto_flush_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_10auto_flush___get__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_6Sender_10auto_flush___get__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client.Sender.auto_flush.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 12529:     def auto_flush(self) -> bint:
 12530:         """
 12531:         Auto-flushing is enabled.
 12532:         
 12533:         Consult the `.auto_flush_rows`, `.auto_flush_bytes` and
 12534:         `.auto_flush_interval` properties for the current active thresholds.
 12535: 
 12536:         Over ``ws`` and ``wss`` the byte threshold is on by default, so
 12537:         auto-flush stays on with ``auto_flush_rows`` and
 12538:         ``auto_flush_interval`` both off. Pass ``auto_flush=off`` to batch
 12539:         by hand.
 12540:         """
+12541:         return self._auto_flush_mode.enabled
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->_auto_flush_mode.enabled); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12541, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 12542: 
+12543:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_15auto_flush_rows_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Sender_15auto_flush_rows_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_15auto_flush_rows___get__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_6Sender_15auto_flush_rows___get__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client.Sender.auto_flush_rows.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 12544:     def auto_flush_rows(self) -> Optional[int]:
 12545:         """
 12546:         Row count threshold for the auto-flush logic, or None if disabled.
 12547:         """
+12548:         if not self._auto_flush_mode.enabled:
  __pyx_t_1 = (!__pyx_v_self->_auto_flush_mode.enabled);
  if (__pyx_t_1) {
/* … */
  }
+12549:             return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+12550:         if self._auto_flush_mode.row_count == -1:
  __pyx_t_1 = (__pyx_v_self->_auto_flush_mode.row_count == -1L);
  if (__pyx_t_1) {
/* … */
  }
+12551:             return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+12552:         return self._auto_flush_mode.row_count
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_From_int64_t(__pyx_v_self->_auto_flush_mode.row_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12552, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 12553: 
+12554:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_16auto_flush_bytes_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Sender_16auto_flush_bytes_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_16auto_flush_bytes___get__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_6Sender_16auto_flush_bytes___get__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
  size_t __pyx_v_hard_cap;
  bool __pyx_v_server_cap_known;
  struct line_sender_error *__pyx_v_err;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client.Sender.auto_flush_bytes.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 12555:     def auto_flush_bytes(self) -> Optional[int]:
 12556:         """
 12557:         Byte-count threshold for the auto-flush logic, or None if disabled or
 12558:         not yet known.
 12559: 
 12560:         Over ``ws`` and ``wss`` the threshold is at most 90% of the
 12561:         connection's frame cap, and by default it is 90% of that cap. The
 12562:         cap is known once :func:`Sender.establish` has connected, so before
 12563:         that the default reports ``None``. A server that does not advertise
 12564:         a cap counts as having QuestDB's default, 2 MiB less 14 bytes,
 12565:         unless the local limit is lower. An explicit threshold reads as
 12566:         configured before :func:`Sender.establish` and after
 12567:         :func:`Sender.close`; the cap lowers it only between the two.
 12568: 
 12569:         Raises :class:`QuestDBError <questdb.QuestDBError>`
 12570:         (``InvalidApiCall``) when read over ``ws`` or ``wss`` from this
 12571:         sender's own ``error_handler`` or ``connection_listener``, or from
 12572:         any thread while this sender is inside a native call such as
 12573:         :func:`Sender.flush`.
 12574:         """
+12575:         cdef size_t hard_cap = 0
  __pyx_v_hard_cap = 0;
+12576:         cdef cbool server_cap_known = False
  __pyx_v_server_cap_known = 0;
+12577:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+12578:         if not self._auto_flush_mode.enabled:
  __pyx_t_1 = (!__pyx_v_self->_auto_flush_mode.enabled);
  if (__pyx_t_1) {
/* … */
  }
+12579:             return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+12580:         if self._auto_flush_mode.byte_count == -1:
  __pyx_t_1 = (__pyx_v_self->_auto_flush_mode.byte_count == -1L);
  if (__pyx_t_1) {
/* … */
  }
+12581:             return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+12582:         if not _is_qwp_ws_protocol(self._c_protocol):
  __pyx_t_1 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 12582, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {
/* … */
  }
+12583:             return self._auto_flush_mode.byte_count
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyLong_From_int64_t(__pyx_v_self->_auto_flush_mode.byte_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12583, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
+12584:         if self._impl == NULL:
  __pyx_t_2 = (__pyx_v_self->_impl == NULL);
  if (__pyx_t_2) {
/* … */
  }
+12585:             if self._auto_flush_bytes_dynamic:
    if (__pyx_v_self->_auto_flush_bytes_dynamic) {
/* … */
    }
+12586:                 return None
      __Pyx_XDECREF(__pyx_r);
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      goto __pyx_L0;
+12587:             return self._auto_flush_mode.byte_count
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyLong_From_int64_t(__pyx_v_self->_auto_flush_mode.byte_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12587, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
+12588:         self._check_not_in_own_callback('auto_flush_bytes')
  __pyx_t_4 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_auto_flush_bytes, NULL); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12588, __pyx_L1_error)
+12589:         if not line_sender_qwpws_effective_frame_cap(
  __pyx_t_2 = (!line_sender_qwpws_effective_frame_cap(__pyx_v_self->_impl, (&__pyx_v_hard_cap), (&__pyx_v_server_cap_known), (&__pyx_v_err)));
  if (unlikely(__pyx_t_2)) {
/* … */
  }
 12590:                 self._impl, &hard_cap, &server_cap_known, &err):
+12591:             raise c_err_to_py(err)
    __pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12591, __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(0, 12591, __pyx_L1_error)
+12592:         return _qwp_row_byte_limit(
  __Pyx_XDECREF(__pyx_r);
/* … */
  __pyx_t_3 = __Pyx_PyLong_FromSize_t(__pyx_f_7questdb_7_client__qwp_row_byte_limit((&__pyx_v_self->_auto_flush_mode), __pyx_v_self->_auto_flush_bytes_dynamic, __pyx_f_7questdb_7_client__qwp_row_planning_cap(__pyx_v_hard_cap, __pyx_v_server_cap_known))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12592, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 12593:             &self._auto_flush_mode,
 12594:             self._auto_flush_bytes_dynamic,
 12595:             _qwp_row_planning_cap(hard_cap, server_cap_known))
 12596: 
+12597:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_19auto_flush_interval_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Sender_19auto_flush_interval_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_19auto_flush_interval___get__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_6Sender_19auto_flush_interval___get__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
  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_AddTraceback("questdb._client.Sender.auto_flush_interval.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 12598:     def auto_flush_interval(self) -> Optional[datetime.timedelta]:
 12599:         """
 12600:         Time interval threshold for the auto-flush logic, or None if disabled.
 12601:         """
+12602:         if not self._auto_flush_mode.enabled:
  __pyx_t_1 = (!__pyx_v_self->_auto_flush_mode.enabled);
  if (__pyx_t_1) {
/* … */
  }
+12603:             return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+12604:         if self._auto_flush_mode.interval == -1:
  __pyx_t_1 = (__pyx_v_self->_auto_flush_mode.interval == -1L);
  if (__pyx_t_1) {
/* … */
  }
+12605:             return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+12606:         return cp_timedelta(milliseconds=self._auto_flush_mode.interval)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = NULL;
  __pyx_t_4 = __Pyx_PyLong_From_int64_t(__pyx_v_self->_auto_flush_mode.interval); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12606, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_3, NULL};
    __pyx_t_6 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12606, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_milliseconds, __pyx_t_4, __pyx_t_6, __pyx_callargs+1, 0) < (0)) __PYX_ERR(0, 12606, __pyx_L1_error)
    __pyx_t_2 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__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(0, 12606, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_2);
  }
  __pyx_r = ((PyObject *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;
 12607: 
+12608:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_16protocol_version_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Sender_16protocol_version_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_16protocol_version___get__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_6Sender_16protocol_version___get__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
  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_AddTraceback("questdb._client.Sender.protocol_version.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 12609:     def protocol_version(self) -> int:
 12610:         """
 12611:         The protocol version used by the sender.
 12612: 
 12613:         Protocol version 1 is retained for backwards compatibility with
 12614:         older QuestDB versions.
 12615: 
 12616:         Protocol version 2 introduces binary floating point support and
 12617:         the array datatype.
 12618: 
 12619:         Raises :class:`QuestDBError <questdb.QuestDBError>`
 12620:         (``InvalidApiCall``) when read from any thread while this sender is
 12621:         inside a native call such as :func:`Sender.flush`.
 12622:         """
+12623:         self._check_not_in_own_callback('protocol_version', allow_idle_callback=True)
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.allow_idle_callback = 1;
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_protocol_version, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12623, __pyx_L1_error)
+12624:         if self._impl == NULL:
  __pyx_t_3 = (__pyx_v_self->_impl == NULL);
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+12625:             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(0, 12625, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
+12626:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12626, __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(0, 12626, __pyx_L1_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_protocol_version_can_t_be_called};
      __pyx_t_4 = __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_4)) __PYX_ERR(0, 12625, __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(0, 12625, __pyx_L1_error)
 12627:                 'protocol_version() can\'t be called: Sender is closed.')
+12628:         if _is_qwp_udp_protocol(self._c_protocol):
  __pyx_t_3 = __pyx_f_7questdb_7_client__is_qwp_udp_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_3 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 12628, __pyx_L1_error)
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+12629:             raise QuestDBError(
    __pyx_t_6 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 12629, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
+12630:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12630, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12630, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_9 = 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_9 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_protocol_version_is_not_applicab};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __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_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12629, __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(0, 12629, __pyx_L1_error)
 12631:                 'protocol_version is not applicable for QWP/UDP senders.')
+12632:         return <int>line_sender_get_protocol_version(self._impl)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = __Pyx_PyLong_From_int(((int)line_sender_get_protocol_version(__pyx_v_self->_impl))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12632, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
 12633: 
+12634:     def establish(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_15establish(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_14establish, "\n        Prepare the sender for use.\n\n        If using ILP/HTTP this will initialize the HTTP connection pool.\n\n        If using ILP/TCP this will cause connection to the server and \n        block until the connection is established.\n\n        If the TCP connection is set up with authentication and/or TLS, this\n        method will return only *after* the handshake(s) is/are complete.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_15establish = {"establish", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_15establish, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_14establish};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_15establish(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
) {
  #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("establish (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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("establish", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("establish", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_14establish(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_6Sender_14establish(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
  struct line_sender_error *__pyx_v_err;
  PyThreadState *__pyx_v_gs;
  struct line_sender *__pyx_v_failed_impl;
  int __pyx_v_outer_in_flight;
  int __pyx_v_warn;
  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_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.Sender.establish", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_15establish, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_establish, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[227])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12634, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_establish, __pyx_t_4) < (0)) __PYX_ERR(0, 12634, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 12635:         """
 12636:         Prepare the sender for use.
 12637: 
 12638:         If using ILP/HTTP this will initialize the HTTP connection pool.
 12639: 
 12640:         If using ILP/TCP this will cause connection to the server and 
 12641:         block until the connection is established.
 12642: 
 12643:         If the TCP connection is set up with authentication and/or TLS, this
 12644:         method will return only *after* the handshake(s) is/are complete.
 12645:         """
+12646:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+12647:         cdef PyThreadState * gs = NULL
  __pyx_v_gs = NULL;
+12648:         cdef line_sender* failed_impl = NULL
  __pyx_v_failed_impl = NULL;
+12649:         self._check_not_in_own_callback('establish')
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_establish, NULL); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12649, __pyx_L1_error)
+12650:         if self._opts == NULL:
  __pyx_t_2 = (__pyx_v_self->_opts == NULL);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+12651:             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(0, 12651, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
+12652:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12652, __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(0, 12652, __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_establish_can_t_be_called_after};
      __pyx_t_3 = __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_3)) __PYX_ERR(0, 12651, __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(0, 12651, __pyx_L1_error)
 12653:                 'establish() can\'t be called after close().')
 12654: 
 12655:         # We disable the GIL when calling `line_sender_build` since for HTTP
 12656:         # it can make HTTP requests to auto-detect the protocol version.
 12657:         # Native borrows the options until it returns, and build can pull an
 12658:         # OIDC token and enter a Python diagnostic callback meanwhile.
+12659:         cdef bint outer_in_flight = self._enter_native()
  __pyx_v_outer_in_flight = __pyx_f_7questdb_7_client_6Sender__enter_native(__pyx_v_self);
+12660:         _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+12661:         self._impl = line_sender_build(self._opts, &err)
  __pyx_v_self->_impl = line_sender_build(__pyx_v_self->_opts, (&__pyx_v_err));
+12662:         _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+12663:         self._exit_native(outer_in_flight)
  __pyx_f_7questdb_7_client_6Sender__exit_native(__pyx_v_self, __pyx_v_outer_in_flight);
 12664: 
+12665:         if self._impl == NULL:
  __pyx_t_2 = (__pyx_v_self->_impl == NULL);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+12666:             raise c_err_to_py(err)
    __pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12666, __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(0, 12666, __pyx_L1_error)
 12667: 
+12668:         if self._buffer is None:
  __pyx_t_2 = (((PyObject *)__pyx_v_self->_buffer) == Py_None);
  if (__pyx_t_2) {
/* … */
  }
+12669:             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_L11_try_end;
      __pyx_L6_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;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
      __pyx_L8_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_L11_try_end:;
    }
+12670:                 self._buffer = self._new_buffer_for_sender()
        __pyx_t_3 = __pyx_f_7questdb_7_client_6Sender__new_buffer_for_sender(__pyx_v_self); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12670, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_3);
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer))))) __PYX_ERR(0, 12670, __pyx_L6_error)
        __Pyx_GIVEREF(__pyx_t_3);
        __Pyx_GOTREF((PyObject *)__pyx_v_self->_buffer);
        __Pyx_DECREF((PyObject *)__pyx_v_self->_buffer);
        __pyx_v_self->_buffer = ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_3);
        __pyx_t_3 = 0;
+12671:             except:
      /*except:*/ {
        __Pyx_AddTraceback("questdb._client.Sender.establish", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_5, &__pyx_t_7) < 0) __PYX_ERR(0, 12671, __pyx_L8_except_error)
        __Pyx_XGOTREF(__pyx_t_3);
        __Pyx_XGOTREF(__pyx_t_5);
        __Pyx_XGOTREF(__pyx_t_7);
+12672:                 failed_impl = self._impl
        __pyx_t_12 = __pyx_v_self->_impl;
        __pyx_v_failed_impl = __pyx_t_12;
+12673:                 self._impl = NULL
        __pyx_v_self->_impl = NULL;
+12674:                 _ensure_doesnt_have_gil(&gs)
        (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+12675:                 line_sender_close(failed_impl)
        line_sender_close(__pyx_v_failed_impl);
+12676:                 _ensure_has_gil(&gs)
        __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+12677:                 raise
        __Pyx_GIVEREF(__pyx_t_3);
        __Pyx_GIVEREF(__pyx_t_5);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_ErrRestoreWithState(__pyx_t_3, __pyx_t_5, __pyx_t_7);
        __pyx_t_3 = 0;  __pyx_t_5 = 0;  __pyx_t_7 = 0; 
        __PYX_ERR(0, 12677, __pyx_L8_except_error)
      }
 12678: 
+12679:         line_sender_opts_free(self._opts)
  line_sender_opts_free(__pyx_v_self->_opts);
+12680:         self._opts = NULL
  __pyx_v_self->_opts = NULL;
 12681: 
+12682:         if self._dispatch_context is not None:
  __pyx_t_2 = (__pyx_v_self->_dispatch_context != Py_None);
  if (__pyx_t_2) {
/* … */
  }
+12683:             self._cb_refs_key = _retain_callback_refs(
    __pyx_t_8 = __pyx_f_7questdb_7_client__retain_callback_refs(((PyObject *)__pyx_v_self), __pyx_t_7); if (unlikely(__pyx_t_8 == ((size_t)-1L) && PyErr_Occurred())) __PYX_ERR(0, 12683, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_v_self->_cb_refs_key = __pyx_t_8;
+12684:                 self, self._dispatch_context)
    __pyx_t_7 = __pyx_v_self->_dispatch_context;
    __Pyx_INCREF(__pyx_t_7);
 12685: 
 12686:         # Request callbacks when rows are complete.
+12687:         self._buffer._row_complete_sender = PyWeakref_NewRef(self, None)
  __pyx_t_7 = PyWeakref_NewRef(((PyObject *)__pyx_v_self), Py_None); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12687, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_7);
  __Pyx_GOTREF(__pyx_v_self->_buffer->_row_complete_sender);
  __Pyx_DECREF(__pyx_v_self->_buffer->_row_complete_sender);
  __pyx_v_self->_buffer->_row_complete_sender = __pyx_t_7;
  __pyx_t_7 = 0;
+12688:         self._last_flush_ms[0] = line_sender_now_micros() // 1000
  (__pyx_v_self->_last_flush_ms[0]) = __Pyx_div_int64_t(line_sender_now_micros(), 0x3E8, 1);
 12689: 
 12690:         # Track and warn about overly quick reconnections to the server.
+12691:         cdef bint warn = False
  __pyx_v_warn = 0;
+12692:         if WARN_HIGH_RECONNECTS:
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_WARN_HIGH_RECONNECTS); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12692, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 12692, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__pyx_t_2) {
/* … */
  }
+12693:             self._slot_id = <int32_t> qdb_active_senders_track_established(&warn)
    __pyx_v_self->_slot_id = ((int32_t)qdb_active_senders_track_established((&__pyx_v_warn)));
+12694:             if warn:
    if (__pyx_v_warn) {
/* … */
    }
+12695:                 warnings.warn(
      __pyx_t_5 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_warnings); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12695, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_warn); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12695, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 12696:                     "questdb.Sender: "
 12697:                     f"Detected a burst of reconnections. "
 12698:                     "This may indicate an inefficient coding pattern where the sender is "
 12699:                     "frequently created and destroyed. "
 12700:                     "Consider reusing sender instance whenever possible."
 12701:                     "See: https://py-questdb-client.readthedocs.io/en/latest/sender.html#reuse-sender-objects",
+12702:                     UserWarning,
      __pyx_t_8 = 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_8 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_questdb_Sender_Detected_a_burst, ((PyObject *)(((PyTypeObject*)PyExc_UserWarning)))};
        __pyx_t_3 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12695, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_stacklevel, __pyx_mstate_global->__pyx_int_1, __pyx_t_3, __pyx_callargs+3, 0) < (0)) __PYX_ERR(0, 12695, __pyx_L1_error)
        __pyx_t_7 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_3);
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 12695, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
      }
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 12703:                     stacklevel=1
 12704:                 )
+12705:         _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(0, 12705, __pyx_L1_error)
 12706: 
+12707:     def __enter__(self) -> Sender:
/* Python wrapper */
static struct __pyx_obj_7questdb_7_client_Sender *__pyx_pw_7questdb_7_client_6Sender_17__enter__(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_16__enter__, "Call :func:`Sender.establish` at the start of a ``with`` block.");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_17__enter__ = {"__enter__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_17__enter__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_16__enter__};
static struct __pyx_obj_7questdb_7_client_Sender *__pyx_pw_7questdb_7_client_6Sender_17__enter__(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
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  struct __pyx_obj_7questdb_7_client_Sender *__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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__enter__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__enter__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_16__enter__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));

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

static struct __pyx_obj_7questdb_7_client_Sender *__pyx_pf_7questdb_7_client_6Sender_16__enter__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
  struct __pyx_obj_7questdb_7_client_Sender *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client.Sender.__enter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12707, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_Sender) < (0)) __PYX_ERR(0, 12707, __pyx_L1_error)
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_17__enter__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender___enter, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[228])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12707, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_17, __pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_enter, __pyx_t_17) < (0)) __PYX_ERR(0, 12707, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 12708:         """Call :func:`Sender.establish` at the start of a ``with`` block."""
+12709:         self.establish()
  __pyx_t_2 = ((PyObject *)__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_establish, __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(0, 12709, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+12710:         return self
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = __pyx_v_self;
  goto __pyx_L0;
 12711: 
+12712:     def __bytes__(self) -> bytes:
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_19__bytes__(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_18__bytes__, "\n        Inspect the contents of the internal buffer.\n\n        The ``bytes`` value returned represents the unsent data.\n\n        For QWP/UDP senders this always returns ``b''`` because encoding\n        is deferred to flush. Use :func:`Sender.__len__` instead for a\n        size estimate.\n\n        Read from inside a part-written row this returns the buffer as\n        it stands, with the last line unterminated; see\n        :func:`Buffer.__bytes__` for why that is allowed where every\n        call that acts on the buffer is refused.\n\n        Also see :func:`Sender.__len__`.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_19__bytes__ = {"__bytes__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_19__bytes__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_18__bytes__};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_19__bytes__(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
) {
  #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("__bytes__ (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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__bytes__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__bytes__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_18__bytes__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_6Sender_18__bytes__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client.Sender.__bytes__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12712, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bytes) < (0)) __PYX_ERR(0, 12712, __pyx_L1_error)
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_19__bytes__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender___bytes, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[229])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12712, __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_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_17);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_bytes_2, __pyx_t_4) < (0)) __PYX_ERR(0, 12712, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 12713:         """
 12714:         Inspect the contents of the internal buffer.
 12715: 
 12716:         The ``bytes`` value returned represents the unsent data.
 12717: 
 12718:         For QWP/UDP senders this always returns ``b''`` because encoding
 12719:         is deferred to flush. Use :func:`Sender.__len__` instead for a
 12720:         size estimate.
 12721: 
 12722:         Read from inside a part-written row this returns the buffer as
 12723:         it stands, with the last line unterminated; see
 12724:         :func:`Buffer.__bytes__` for why that is allowed where every
 12725:         call that acts on the buffer is refused.
 12726: 
 12727:         Also see :func:`Sender.__len__`.
 12728:         """
+12729:         if self._buffer is None:
  __pyx_t_1 = (((PyObject *)__pyx_v_self->_buffer) == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+12730:             return b''
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_b__7);
    __pyx_r = __pyx_mstate_global->__pyx_kp_b__7;
    goto __pyx_L0;
 12731:         else:
+12732:             return bytes(self._buffer)
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, ((PyObject *)__pyx_v_self->_buffer)};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(&PyBytes_Type), __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(0, 12732, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_r = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }
 12733: 
+12734:     def __len__(self) -> int:
/* Python wrapper */
static Py_ssize_t __pyx_pw_7questdb_7_client_6Sender_21__len__(PyObject *__pyx_v_self); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_20__len__, "\n        Number of bytes of unsent data in the internal buffer.\n\n        Equivalent (but cheaper) to ``len(bytes(sender))`` over ILP.\n\n        For QWP/UDP senders this returns an estimated size hint, not the\n        exact serialized byte count. For QWP/WebSocket senders it is an\n        estimate that is never below the size of the frame a flush\n        encodes, unless store-and-forward has fallen back to sending full\n        symbol dictionaries.\n        ");
#if CYTHON_UPDATE_DESCRIPTOR_DOC
struct wrapperbase __pyx_wrapperbase_7questdb_7_client_6Sender_20__len__;
#endif
static Py_ssize_t __pyx_pw_7questdb_7_client_6Sender_21__len__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_20__len__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));

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

static Py_ssize_t __pyx_pf_7questdb_7_client_6Sender_20__len__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
  Py_ssize_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client.Sender.__len__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 12735:         """
 12736:         Number of bytes of unsent data in the internal buffer.
 12737: 
 12738:         Equivalent (but cheaper) to ``len(bytes(sender))`` over ILP.
 12739: 
 12740:         For QWP/UDP senders this returns an estimated size hint, not the
 12741:         exact serialized byte count. For QWP/WebSocket senders it is an
 12742:         estimate that is never below the size of the frame a flush
 12743:         encodes, unless store-and-forward has fallen back to sending full
 12744:         symbol dictionaries.
 12745:         """
+12746:         if self._buffer is None:
  __pyx_t_1 = (((PyObject *)__pyx_v_self->_buffer) == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+12747:             return 0
    __pyx_r = 0;
    goto __pyx_L0;
 12748:         else:
+12749:             return len(self._buffer)
  /*else*/ {
    __pyx_t_2 = ((PyObject *)__pyx_v_self->_buffer);
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_3 = PyObject_Length(__pyx_t_2); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(0, 12749, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_3;
    goto __pyx_L0;
  }
 12750: 
+12751:     def transaction(self, table_name: str):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_23transaction(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_22transaction, "\n        Start a :ref:`sender_transaction` block.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_23transaction = {"transaction", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_23transaction, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_22transaction};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_23transaction(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_table_name = 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("transaction (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_table_name,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(0, 12751, __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(0, 12751, __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, "transaction", 0) < (0)) __PYX_ERR(0, 12751, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("transaction", 1, 1, 1, i); __PYX_ERR(0, 12751, __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(0, 12751, __pyx_L3_error)
    }
    __pyx_v_table_name = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("transaction", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 12751, __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.Sender.transaction", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_table_name), (&PyUnicode_Type), 0, "table_name", 2))) __PYX_ERR(0, 12751, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_22transaction(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), __pyx_v_table_name);
  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_6Sender_22transaction(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, PyObject *__pyx_v_table_name) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client.Sender.transaction", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12751, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_table_name, __pyx_mstate_global->__pyx_n_u_str_2) < (0)) __PYX_ERR(0, 12751, __pyx_L1_error)
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_23transaction, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_transaction, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[230])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12751, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_17, __pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_transaction, __pyx_t_17) < (0)) __PYX_ERR(0, 12751, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 12752:         """
 12753:         Start a :ref:`sender_transaction` block.
 12754:         """
+12755:         self._check_not_in_own_callback('transaction')
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_transaction, NULL); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12755, __pyx_L1_error)
 12756:         # The guard that protects a row in progress sits on
 12757:         # `SenderTransaction.__enter__` and `rollback()`, where the
 12758:         # transaction acts on the buffer: a transaction made earlier, or
 12759:         # constructed directly, reaches those without passing through
 12760:         # here. Refusing here as well names the call the caller made.
+12761:         if self._buffer is not None:
  __pyx_t_2 = (((PyObject *)__pyx_v_self->_buffer) != Py_None);
  if (__pyx_t_2) {
/* … */
  }
+12762:             self._buffer._check_not_in_row('transaction')
    __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_self->_buffer, __pyx_mstate_global->__pyx_n_u_transaction, NULL); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12762, __pyx_L1_error)
+12763:         return SenderTransaction(self, table_name)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = NULL;
  __pyx_t_5 = 1;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_4, ((PyObject *)__pyx_v_self), __pyx_v_table_name};
    __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_SenderTransaction, __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;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12763, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_3);
  }
  __pyx_r = ((PyObject *)__pyx_t_3);
  __pyx_t_3 = 0;
  goto __pyx_L0;
 12764: 
+12765:     def row(self,
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_25row(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_24row, "\n        Write a row to the internal buffer.\n\n        This may be sent automatically depending on the ``auto_flush`` setting\n        in the constructor.\n\n        See :func:`Buffer.row <questdb.ingress.Buffer.row>` for supported\n        column types, protocol restrictions, server requirements, and\n        ``NULL``-sentinel behavior.\n\n        Raises :class:`QuestDBError <questdb.QuestDBError>`\n        (``InvalidApiCall``) if called while another ``row()`` on this\n        sender is still in progress, or a ``dataframe()`` over ``tcp``,\n        ``http`` or ``udp``: from a column value whose conversion runs\n        Python code, or from a logging handler that writes the ``questdb``\n        logger's records through this sender. Such a ``dataframe()``\n        writes the frame into this sender's buffer, and a row written while\n        it runs could not be flushed until it returned. Over ``ws`` and\n        ``wss`` the frame goes out on a connection of its own, so a row\n        written from inside it is accepted and flushed as usual.\n\n        Over ``ws`` and ``wss``, it also raises ``InvalidApiCall``, without\n        adding the row, when called from this sender's own ``error_handler``\n        or ``connection_listener``. That includes a logging handler that\n        writes the ``questdb`` logger's records through this sender while no\n        ``error_handler`` is set, since server rejections are then logged\n        from inside that callback.\n\n        Over ``ws`` and ``wss``, auto-flush also publishes a buffer whose size\n        estimate reaches the connection's frame cap, even with\n        ``auto_flush_bytes=off``. Every published frame fits the frame cap:\n        when the whole buffer does not, or its size estimate is past the\n        cap, the rows buffered before this one go out as a frame of their\n        own and this row starts the next batch, so one call publishes at\n        most two frames. Re-adding the row converts its values a second\n   ""     time.\n\n        Over ``ws`` and ``wss``, whatever this method raises, the row was not\n        added. :class:`QuestDBError <questdb.QuestDBError>`\n        (``BatchTooLarge``) means either it does not fit in a frame on its\n        own, or the rows buffered before it do not fit even without it,\n        which can happen after the frame cap shrinks, for example on\n        reconnect; those rows are then discarded, and the error says how\n        many. Any other error raised by a publish also clears the rows\n        buffered before it, as :func:`Sender.flush` does.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_25row = {"row", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_25row, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_24row};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_25row(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_table_name = 0;
  PyObject *__pyx_v_symbols = 0;
  PyObject *__pyx_v_columns = 0;
  PyObject *__pyx_v_at = 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 (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_table_name,&__pyx_mstate_global->__pyx_n_u_at,&__pyx_mstate_global->__pyx_n_u_symbols,&__pyx_mstate_global->__pyx_n_u_columns,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(0, 12765, __pyx_L3_error)
    if (likely(__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(0, 12765, __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", 0) < (0)) __PYX_ERR(0, 12765, __pyx_L3_error)
/* … */
  /* 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_6Sender_24row(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, PyObject *__pyx_v_table_name, PyObject *__pyx_v_symbols, PyObject *__pyx_v_columns, PyObject *__pyx_v_at) {
  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.Sender.row", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12765, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
/* … */
  __pyx_t_4 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12765, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_table_name, __pyx_mstate_global->__pyx_n_u_str_2) < (0)) __PYX_ERR(0, 12765, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_Optional_str) < (0)) __PYX_ERR(0, 12765, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_columns, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_Union_None_boo_2) < (0)) __PYX_ERR(0, 12765, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_at, __pyx_mstate_global->__pyx_kp_u_Union_TimestampNanos_datetime_da) < (0)) __PYX_ERR(0, 12765, __pyx_L1_error)
  __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_25row, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_row, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[231])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 12765, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25);
  #endif
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_25, __pyx_t_17);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_25, __pyx_t_4);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_row_2, __pyx_t_25) < (0)) __PYX_ERR(0, 12765, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 12766:             table_name: str,
 12767:             *,
+12768:             symbols: Optional[Dict[str, Optional[str]]]=None,
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_symbols, Py_None) < (0)) __PYX_ERR(0, 12765, __pyx_L1_error)
 12769:             columns: Optional[Dict[
 12770:                 str,
 12771:                 Union[None, bool, int, float, str, TimestampMicros,
 12772:                       TimestampNanos, datetime.datetime, numpy.ndarray,
 12773:                       Decimal, uuid.UUID, ipaddress.IPv4Address, bytes,
 12774:                       bytearray, memoryview, Char, DateMillis, Long256,
+12775:                       Geohash]]]=None,
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("row", 1, 1, 1, i); __PYX_ERR(0, 12765, __pyx_L3_error) }
      }
      for (Py_ssize_t i = 1; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseKeywordRequired("row", *(__pyx_pyargnames[i - 0])); __PYX_ERR(0, 12765, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      __Pyx_RaiseKeywordRequired("row", __pyx_mstate_global->__pyx_n_u_at); __PYX_ERR(0, 12765, __pyx_L3_error)
    }
    __pyx_v_table_name = ((PyObject*)values[0]);
    __pyx_v_at = values[1];
    __pyx_v_symbols = ((PyObject*)values[2]);
    __pyx_v_columns = ((PyObject*)values[3]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("row", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 12765, __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.Sender.row", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_table_name), (&PyUnicode_Type), 0, "table_name", 2))) __PYX_ERR(0, 12766, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_symbols), (&PyDict_Type), 1, "symbols", 2))) __PYX_ERR(0, 12768, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_columns), (&PyDict_Type), 1, "columns", 2))) __PYX_ERR(0, 12769, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_24row(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), __pyx_v_table_name, __pyx_v_symbols, __pyx_v_columns, __pyx_v_at);
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_columns, Py_None) < (0)) __PYX_ERR(0, 12765, __pyx_L1_error)
 12776:             at: Union[TimestampNanos, datetime.datetime, ServerTimestampType]):
 12777:         """
 12778:         Write a row to the internal buffer.
 12779: 
 12780:         This may be sent automatically depending on the ``auto_flush`` setting
 12781:         in the constructor.
 12782: 
 12783:         See :func:`Buffer.row <questdb.ingress.Buffer.row>` for supported
 12784:         column types, protocol restrictions, server requirements, and
 12785:         ``NULL``-sentinel behavior.
 12786: 
 12787:         Raises :class:`QuestDBError <questdb.QuestDBError>`
 12788:         (``InvalidApiCall``) if called while another ``row()`` on this
 12789:         sender is still in progress, or a ``dataframe()`` over ``tcp``,
 12790:         ``http`` or ``udp``: from a column value whose conversion runs
 12791:         Python code, or from a logging handler that writes the ``questdb``
 12792:         logger's records through this sender. Such a ``dataframe()``
 12793:         writes the frame into this sender's buffer, and a row written while
 12794:         it runs could not be flushed until it returned. Over ``ws`` and
 12795:         ``wss`` the frame goes out on a connection of its own, so a row
 12796:         written from inside it is accepted and flushed as usual.
 12797: 
 12798:         Over ``ws`` and ``wss``, it also raises ``InvalidApiCall``, without
 12799:         adding the row, when called from this sender's own ``error_handler``
 12800:         or ``connection_listener``. That includes a logging handler that
 12801:         writes the ``questdb`` logger's records through this sender while no
 12802:         ``error_handler`` is set, since server rejections are then logged
 12803:         from inside that callback.
 12804: 
 12805:         Over ``ws`` and ``wss``, auto-flush also publishes a buffer whose size
 12806:         estimate reaches the connection's frame cap, even with
 12807:         ``auto_flush_bytes=off``. Every published frame fits the frame cap:
 12808:         when the whole buffer does not, or its size estimate is past the
 12809:         cap, the rows buffered before this one go out as a frame of their
 12810:         own and this row starts the next batch, so one call publishes at
 12811:         most two frames. Re-adding the row converts its values a second
 12812:         time.
 12813: 
 12814:         Over ``ws`` and ``wss``, whatever this method raises, the row was not
 12815:         added. :class:`QuestDBError <questdb.QuestDBError>`
 12816:         (``BatchTooLarge``) means either it does not fit in a frame on its
 12817:         own, or the rows buffered before it do not fit even without it,
 12818:         which can happen after the frame cap shrinks, for example on
 12819:         reconnect; those rows are then discarded, and the error says how
 12820:         many. Any other error raised by a publish also clears the rows
 12821:         buffered before it, as :func:`Sender.flush` does.
 12822:         """
+12823:         if self._in_txn:
  if (unlikely(__pyx_v_self->_in_txn)) {
/* … */
  }
+12824:             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(0, 12824, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
+12825:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12825, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12825, __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_Cannot_append_rows_explicitly_in};
      __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(0, 12824, __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(0, 12824, __pyx_L1_error)
 12826:                 'Cannot append rows explicitly inside a transaction')
+12827:         if at is None:
  __pyx_t_7 = (__pyx_v_at == Py_None);
  if (unlikely(__pyx_t_7)) {
/* … */
  }
+12828:             raise QuestDBError(
    __pyx_t_3 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 12828, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
+12829:                 QuestDBErrorCode.InvalidTimestamp,
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12829, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12829, __pyx_L1_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_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_6 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_4, __pyx_mstate_global->__pyx_kp_u_at_must_be_of_type_TimestampNan};
      __pyx_t_1 = __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_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_1)) __PYX_ERR(0, 12828, __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(0, 12828, __pyx_L1_error)
 12830:                 "`at` must be of type TimestampNanos, datetime, or ServerTimestamp"
 12831:             )
+12832:         if self._buffer is None:
  __pyx_t_7 = (((PyObject *)__pyx_v_self->_buffer) == Py_None);
  if (unlikely(__pyx_t_7)) {
/* … */
  }
+12833:             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(0, 12833, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+12834:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12834, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12834, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 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[3] = {__pyx_t_5, __pyx_t_2, __pyx_mstate_global->__pyx_kp_u_row_can_t_be_called_Sender_is_cl};
      __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_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12833, __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(0, 12833, __pyx_L1_error)
 12835:                 "row() can\'t be called: Sender is closed."
 12836:             )
 12837:         # Refused before the row is added. Over ws/wss, auto-flush also
 12838:         # reads the frame cap from the native sender on every row. Asked
 12839:         # only when the answer can be a refusal: this runs once per row.
+12840:         if self._native_in_flight or _DISPATCHES_IN_PROGRESS != 0:
  if (!__pyx_v_self->_native_in_flight) {
  } else {
    __pyx_t_7 = __pyx_v_self->_native_in_flight;
    goto __pyx_L7_bool_binop_done;
  }
  __pyx_t_8 = (__pyx_v_7questdb_7_client__DISPATCHES_IN_PROGRESS != 0);
  __pyx_t_7 = __pyx_t_8;
  __pyx_L7_bool_binop_done:;
  if (__pyx_t_7) {
/* … */
  }
+12841:             self._check_not_in_own_callback('row')
    __pyx_t_9 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_row_2, NULL); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12841, __pyx_L1_error)
 12842:         # A row-serializing `dataframe()` holds this buffer from the
 12843:         # moment it starts and runs caller Python before its first row:
 12844:         # the `questdb` logger, an object column's sniff. A row written
 12845:         # there has an auto-flush that cannot run until that call
 12846:         # returns, so the row is refused before anything is written.
+12847:         self._buffer._check_not_in_row(
  __pyx_t_10.__pyx_n = 1;
  __pyx_t_10.hint = __pyx_mstate_global->__pyx_kp_u_A_logging_handler_that_writes_th;
  __pyx_t_9 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_self->_buffer, __pyx_mstate_global->__pyx_n_u_row_2, &__pyx_t_10); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12847, __pyx_L1_error)
 12848:             'row',
 12849:             "A logging handler that writes the `questdb` logger's records "
 12850:             "through this same sender arrives here too; give it a Sender "
 12851:             "of its own.")
+12852:         if _is_qwp_ws_protocol(self._c_protocol):
  __pyx_t_7 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_7 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 12852, __pyx_L1_error)
  if (__pyx_t_7) {
/* … */
    goto __pyx_L9;
  }
+12853:             _qwp_row_append(
    __pyx_t_9 = __pyx_f_7questdb_7_client__qwp_row_append(__pyx_v_self, ((struct __pyx_obj_7questdb_7_client_PooledSender *)Py_None), ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_1), __pyx_v_table_name, __pyx_v_symbols, __pyx_v_columns, __pyx_v_at); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12853, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+12854:                 self, None, self._buffer, table_name, symbols, columns, at)
    __pyx_t_1 = ((PyObject *)__pyx_v_self->_buffer);
    __Pyx_INCREF(__pyx_t_1);
 12855:         else:
+12856:             self._buffer.row(
  /*else*/ {
    __pyx_t_4 = ((PyObject *)__pyx_v_self->_buffer);
    __Pyx_INCREF(__pyx_t_4);
+12857:                 table_name, symbols=symbols, columns=columns, at=at)
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 3 : 0)] = {__pyx_t_4, __pyx_v_table_name};
      __pyx_t_2 = __Pyx_MakeVectorcallBuilderKwds(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12856, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_symbols, __pyx_v_symbols, __pyx_t_2, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 12856, __pyx_L1_error)
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_columns, __pyx_v_columns, __pyx_t_2, __pyx_callargs+2, 1) < (0)) __PYX_ERR(0, 12856, __pyx_L1_error)
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_at, __pyx_v_at, __pyx_t_2, __pyx_callargs+2, 2) < (0)) __PYX_ERR(0, 12856, __pyx_L1_error)
      __pyx_t_1 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_row_2, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_2);
      __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(0, 12856, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __pyx_L9:;
+12858:         return self
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;
 12859: 
+12860:     def dataframe(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_27dataframe(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_26dataframe, "\n        Write a Pandas DataFrame to QuestDB.\n\n        Over ILP/HTTP and ILP/TCP the frame is serialized into the internal\n        row buffer; over QWP/UDP into fire-and-forget datagrams, with the\n        same delivery caveats as ``row()``. Over QWP/WebSocket the frame is\n        bulk-loaded through a poolless direct columnar connection opened from\n        this sender's configuration for the call (the same direct path as\n        :meth:`QuestDB.dataframe`, carrying the sender's auth/TLS regardless\n        of how it was constructed); ``max_rows_per_batch`` applies only on\n        that path, and passing ``schema_overrides`` on any other protocol\n        raises. The direct load has no\n        ordering relationship with rows buffered via :meth:`row` and does not\n        flush them.\n\n        ``table_name_col`` follows the same split. The row-serializing\n        protocols accept it, because they can change table between rows.\n        QWP/WebSocket writes one table per call and rejects it with\n        :class:`UnsupportedDataFrameShapeError\n        <questdb.UnsupportedDataFrameShapeError>`; split the frame and make\n        one call per table, or send those rows with :meth:`row`.\n\n        Example:\n\n        .. code-block:: python\n\n            import pandas as pd\n            import questdb as qi\n\n            df = pd.DataFrame({\n                'car': pd.Categorical(['Nic 42', 'Eddi', 'Nic 42', 'Eddi']),\n                'position': [1, 2, 1, 2],\n                'speed': [89.3, 98.2, 3, 4],\n                'lat_gforce': [0.1, -0.2, -0.6, 0.4],\n                'accelleration': [0.1, -0.2, 0.6, 4.4],\n                'tyre_pressure': [2.6, 2.5, 2.6, 2.5],\n                'ts': [\n                    pd.Timestamp('2022-08-09 13:56:00'),\n                    pd.Timestamp('2022-08-09 13:56:01'),\n                    pd.Timestamp('2022-08-09 13:56:02'),\n                    pd.Timestamp('2022-08-09 13:56:03')]})\n\n            with qi.Sender.from_env("") as sender:\n                sender.dataframe(df, table_name='race_metrics', at='ts')\n\n        Over QWP/WebSocket, supported column types and arguments mirror\n        :meth:`QuestDB.dataframe <questdb.QuestDB.dataframe>`, including\n        UUID, IPV4, BINARY, GEOHASH, LONG256, CHAR, DATE,\n        ``schema_overrides`` and round-trip claims in\n        ``df.attrs['questdb']``. Over ILP and QWP/UDP, see\n        :func:`Buffer.dataframe <questdb.ingress.Buffer.dataframe>` for the\n        row-serializing mappings; ``max_rows_per_batch`` and\n        ``schema_overrides`` do not apply on those protocols.\n\n        Additionally, this method also supports auto-flushing the buffer\n        as specified in the ``Sender``'s ``auto_flush`` constructor argument.\n        Auto-flushing is implemented incrementally, meanting that when\n        calling ``sender.dataframe(df)`` with a large ``df``, the sender may\n        have sent some of the rows to the server already whist the rest of the\n        rows are going to be sent at the next auto-flush or next explicit call\n        to :func:`Sender.flush`.\n\n        In case of data errors with auto-flushing enabled, some of the rows\n        may have been transmitted to the server already.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_27dataframe = {"dataframe", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_27dataframe, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_26dataframe};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_27dataframe(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_df = 0;
  PyObject *__pyx_v_table_name = 0;
  PyObject *__pyx_v_table_name_col = 0;
  PyObject *__pyx_v_symbols = 0;
  PyObject *__pyx_v_at = 0;
  PyObject *__pyx_v_max_rows_per_batch = 0;
  PyObject *__pyx_v_schema_overrides = 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("dataframe (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_df_2,&__pyx_mstate_global->__pyx_n_u_at,&__pyx_mstate_global->__pyx_n_u_table_name,&__pyx_mstate_global->__pyx_n_u_table_name_col,&__pyx_mstate_global->__pyx_n_u_symbols,&__pyx_mstate_global->__pyx_n_u_max_rows_per_batch,&__pyx_mstate_global->__pyx_n_u_schema_overrides_2,0};
  PyObject* values[7] = {0,0,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(0, 12860, __pyx_L3_error)
    if (likely(__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(0, 12860, __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, "dataframe", 0) < (0)) __PYX_ERR(0, 12860, __pyx_L3_error)
/* … */
  /* 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_6Sender_26dataframe(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, PyObject *__pyx_v_df, PyObject *__pyx_v_table_name, PyObject *__pyx_v_table_name_col, PyObject *__pyx_v_symbols, PyObject *__pyx_v_at, PyObject *__pyx_v_max_rows_per_batch, PyObject *__pyx_v_schema_overrides) {
  struct __pyx_t_7questdb_7_client_auto_flush_t __pyx_v_af;
  struct __pyx_t_7questdb_7_client_direct_conn_source_t __pyx_v_src;
  struct qdb_pystr_buf *__pyx_v_ws_b;
  struct __pyx_t_7questdb_7_client_dataframe_plan_t __pyx_v_ws_plan;
  struct line_sender_opts *__pyx_v_ws_opts;
  CYTHON_UNUSED PyObject *__pyx_v_ws_dispatch_context = 0;
  CYTHON_UNUSED PyObject *__pyx_v_ws_bearer_holder = 0;
  PyThreadState *__pyx_v_gs;
  int __pyx_v_outer_in_flight;
  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.Sender.dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_ws_dispatch_context);
  __Pyx_XDECREF(__pyx_v_ws_bearer_holder);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_25 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 12860, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
/* … */
  __pyx_t_4 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12860, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_table_name, __pyx_mstate_global->__pyx_kp_u_Optional_str) < (0)) __PYX_ERR(0, 12860, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_table_name_col, __pyx_mstate_global->__pyx_kp_u_Union_None_int_str) < (0)) __PYX_ERR(0, 12860, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_kp_u_Union_str_bool_List_int_List_str) < (0)) __PYX_ERR(0, 12860, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_at, __pyx_mstate_global->__pyx_kp_u_Union_ServerTimestampType_int_st) < (0)) __PYX_ERR(0, 12860, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_max_rows_per_batch, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 12860, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_schema_overrides_2, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_object) < (0)) __PYX_ERR(0, 12860, __pyx_L1_error)
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_27dataframe, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_dataframe, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[232])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 12860, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_17, __pyx_t_25);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_17, __pyx_t_4);
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_dataframe, __pyx_t_17) < (0)) __PYX_ERR(0, 12860, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 12861:             self,
 12862:             df,  # : pd.DataFrame
 12863:             *,
+12864:             table_name: Optional[str] = None,
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_table_name, Py_None) < (0)) __PYX_ERR(0, 12860, __pyx_L1_error)
+12865:             table_name_col: Union[None, int, str] = None,
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_n_u_auto));
      if (!values[5]) values[5] = __Pyx_NewRef(__pyx_mstate_global->__pyx_k__40);
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_table_name_col, Py_None) < (0)) __PYX_ERR(0, 12860, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_n_u_auto) < (0)) __PYX_ERR(0, 12860, __pyx_L1_error)
 12866:             symbols: Union[str, bool, List[int], List[str]] = 'auto',
 12867:             at: Union[ServerTimestampType, int, str, TimestampNanos, datetime.datetime],
+12868:             max_rows_per_batch: int = DEFAULT_MAX_CHUNK_ROWS,
  __Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_DEFAULT_MAX_CHUNK_ROWS); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 12868, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  if (__Pyx_PyInt_FromNumber(&__pyx_t_25, NULL, 1) < (0)) __PYX_ERR(0, 12868, __pyx_L1_error)
  __pyx_mstate_global->__pyx_k__40 = ((PyObject*)__pyx_t_25);
  __Pyx_GIVEREF(__pyx_t_25);
  __pyx_t_25 = 0;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_DEFAULT_MAX_CHUNK_ROWS); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12868, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_PyInt_FromNumber(&__pyx_t_4, NULL, 1) < (0)) __PYX_ERR(0, 12868, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_max_rows_per_batch, __pyx_t_4) < (0)) __PYX_ERR(0, 12860, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+12869:             schema_overrides: Optional[Dict[str, object]] = None):
      if (!values[6]) values[6] = __Pyx_NewRef(((PyObject*)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("dataframe", 1, 1, 1, i); __PYX_ERR(0, 12860, __pyx_L3_error) }
      }
      for (Py_ssize_t i = 1; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseKeywordRequired("dataframe", *(__pyx_pyargnames[i - 0])); __PYX_ERR(0, 12860, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      __Pyx_RaiseKeywordRequired("dataframe", __pyx_mstate_global->__pyx_n_u_at); __PYX_ERR(0, 12860, __pyx_L3_error)
    }
    __pyx_v_df = values[0];
    __pyx_v_at = values[1];
    __pyx_v_table_name = ((PyObject*)values[2]);
    __pyx_v_table_name_col = values[3];
    __pyx_v_symbols = values[4];
    if (__Pyx_PyInt_FromNumber(&values[5], "max_rows_per_batch", 0) < (0)) __PYX_ERR(0, 12868, __pyx_L3_error)
    __pyx_v_max_rows_per_batch = ((PyObject*)values[5]);
    __pyx_v_schema_overrides = ((PyObject*)values[6]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("dataframe", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 12860, __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.Sender.dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_table_name), (&PyUnicode_Type), 1, "table_name", 2))) __PYX_ERR(0, 12864, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_max_rows_per_batch), (&PyLong_Type), 0, "max_rows_per_batch", 2))) __PYX_ERR(0, 12868, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema_overrides), (&PyDict_Type), 1, "schema_overrides", 2))) __PYX_ERR(0, 12869, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_26dataframe(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at, __pyx_v_max_rows_per_batch, __pyx_v_schema_overrides);
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_schema_overrides_2, Py_None) < (0)) __PYX_ERR(0, 12860, __pyx_L1_error)
 12870:         """
 12871:         Write a Pandas DataFrame to QuestDB.
 12872: 
 12873:         Over ILP/HTTP and ILP/TCP the frame is serialized into the internal
 12874:         row buffer; over QWP/UDP into fire-and-forget datagrams, with the
 12875:         same delivery caveats as ``row()``. Over QWP/WebSocket the frame is
 12876:         bulk-loaded through a poolless direct columnar connection opened from
 12877:         this sender's configuration for the call (the same direct path as
 12878:         :meth:`QuestDB.dataframe`, carrying the sender's auth/TLS regardless
 12879:         of how it was constructed); ``max_rows_per_batch`` applies only on
 12880:         that path, and passing ``schema_overrides`` on any other protocol
 12881:         raises. The direct load has no
 12882:         ordering relationship with rows buffered via :meth:`row` and does not
 12883:         flush them.
 12884: 
 12885:         ``table_name_col`` follows the same split. The row-serializing
 12886:         protocols accept it, because they can change table between rows.
 12887:         QWP/WebSocket writes one table per call and rejects it with
 12888:         :class:`UnsupportedDataFrameShapeError
 12889:         <questdb.UnsupportedDataFrameShapeError>`; split the frame and make
 12890:         one call per table, or send those rows with :meth:`row`.
 12891: 
 12892:         Example:
 12893: 
 12894:         .. code-block:: python
 12895: 
 12896:             import pandas as pd
 12897:             import questdb as qi
 12898: 
 12899:             df = pd.DataFrame({
 12900:                 'car': pd.Categorical(['Nic 42', 'Eddi', 'Nic 42', 'Eddi']),
 12901:                 'position': [1, 2, 1, 2],
 12902:                 'speed': [89.3, 98.2, 3, 4],
 12903:                 'lat_gforce': [0.1, -0.2, -0.6, 0.4],
 12904:                 'accelleration': [0.1, -0.2, 0.6, 4.4],
 12905:                 'tyre_pressure': [2.6, 2.5, 2.6, 2.5],
 12906:                 'ts': [
 12907:                     pd.Timestamp('2022-08-09 13:56:00'),
 12908:                     pd.Timestamp('2022-08-09 13:56:01'),
 12909:                     pd.Timestamp('2022-08-09 13:56:02'),
 12910:                     pd.Timestamp('2022-08-09 13:56:03')]})
 12911: 
 12912:             with qi.Sender.from_env() as sender:
 12913:                 sender.dataframe(df, table_name='race_metrics', at='ts')
 12914: 
 12915:         Over QWP/WebSocket, supported column types and arguments mirror
 12916:         :meth:`QuestDB.dataframe <questdb.QuestDB.dataframe>`, including
 12917:         UUID, IPV4, BINARY, GEOHASH, LONG256, CHAR, DATE,
 12918:         ``schema_overrides`` and round-trip claims in
 12919:         ``df.attrs['questdb']``. Over ILP and QWP/UDP, see
 12920:         :func:`Buffer.dataframe <questdb.ingress.Buffer.dataframe>` for the
 12921:         row-serializing mappings; ``max_rows_per_batch`` and
 12922:         ``schema_overrides`` do not apply on those protocols.
 12923: 
 12924:         Additionally, this method also supports auto-flushing the buffer
 12925:         as specified in the ``Sender``'s ``auto_flush`` constructor argument.
 12926:         Auto-flushing is implemented incrementally, meanting that when
 12927:         calling ``sender.dataframe(df)`` with a large ``df``, the sender may
 12928:         have sent some of the rows to the server already whist the rest of the
 12929:         rows are going to be sent at the next auto-flush or next explicit call
 12930:         to :func:`Sender.flush`.
 12931: 
 12932:         In case of data errors with auto-flushing enabled, some of the rows
 12933:         may have been transmitted to the server already.
 12934:         """
+12935:         cdef auto_flush_t af = auto_flush_blank()
  __pyx_v_af = __pyx_f_7questdb_7_client_auto_flush_blank();
 12936:         cdef direct_conn_source_t src
+12937:         cdef qdb_pystr_buf* ws_b = NULL
  __pyx_v_ws_b = NULL;
 12938:         cdef dataframe_plan_t ws_plan
+12939:         cdef line_sender_opts* ws_opts = NULL
  __pyx_v_ws_opts = NULL;
+12940:         cdef object ws_dispatch_context = None
  __Pyx_INCREF(Py_None);
  __pyx_v_ws_dispatch_context = Py_None;
+12941:         cdef object ws_bearer_holder = None
  __Pyx_INCREF(Py_None);
  __pyx_v_ws_bearer_holder = Py_None;
+12942:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+12943:         self._check_not_in_own_callback('dataframe')
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_dataframe, NULL); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12943, __pyx_L1_error)
 12944:         # The QWP/WebSocket branch below goes straight to its own
 12945:         # connection and never reaches `_dataframe`, where the same
 12946:         # check stands for every other route. Without it here, a frame
 12947:         # re-entered from a half-written row publishes ahead of the row
 12948:         # it interrupted and the order of the two silently inverts.
+12949:         if self._buffer is not None:
  __pyx_t_2 = (((PyObject *)__pyx_v_self->_buffer) != Py_None);
  if (__pyx_t_2) {
/* … */
  }
+12950:             self._buffer._check_not_in_row('dataframe')
    __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_self->_buffer, __pyx_mstate_global->__pyx_n_u_dataframe, NULL); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12950, __pyx_L1_error)
+12951:         if _is_qwp_ws_protocol(self._c_protocol):
  __pyx_t_2 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 12951, __pyx_L1_error)
  if (__pyx_t_2) {
/* … */
  }
+12952:             if self._qwp_ws_opts == NULL:
    __pyx_t_2 = (__pyx_v_self->_qwp_ws_opts == NULL);
    if (unlikely(__pyx_t_2)) {
/* … */
    }
+12953:                 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(0, 12953, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
+12954:                     QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 12954, __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(0, 12954, __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_dataframe_can_t_be_called_Sender};
        __pyx_t_3 = __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_3)) __PYX_ERR(0, 12953, __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(0, 12953, __pyx_L1_error)
 12955:                     "dataframe() can't be called: Sender is closed.")
 12956:             # The cloned opts below contain a borrowed pointer to this
 12957:             # context, and the native token provider, which reaches its Python
 12958:             # target through the sender's bearer-token holder. Caller Python
 12959:             # run while planning may close the Sender, which releases both, so
 12960:             # keep them rooted in this frame until the direct connection and
 12961:             # its dispatchers have been torn down.
+12962:             ws_dispatch_context = self._dispatch_context
    __pyx_t_3 = __pyx_v_self->_dispatch_context;
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_ws_dispatch_context, __pyx_t_3);
    __pyx_t_3 = 0;
+12963:             ws_bearer_holder = _sender_bearer_holder(self)
    __pyx_t_3 = __pyx_f_7questdb_7_client__sender_bearer_holder(__pyx_v_self); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12963, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_ws_bearer_holder, __pyx_t_3);
    __pyx_t_3 = 0;
+12964:             src.db = NULL
    __pyx_v_src.db = NULL;
 12965:             # The call owns its options for its whole length. The plan
 12966:             # build below runs caller Python -- reading `attrs`,
 12967:             # sniffing object cells, pulling an Arrow stream -- and any
 12968:             # of that can call `close()`, which frees the sender's own
 12969:             # options struct while `_direct_conn_open` has still to
 12970:             # read it. Owning a clone is what makes that harmless,
 12971:             # rather than a guard that has to name every route a close
 12972:             # can arrive through, and it leaves the row buffer's own
 12973:             # bookkeeping to mean only what it says.
+12974:             ws_opts = line_sender_opts_clone(self._qwp_ws_opts)
    __pyx_v_ws_opts = line_sender_opts_clone(__pyx_v_self->_qwp_ws_opts);
+12975:             if ws_opts == NULL:
    __pyx_t_2 = (__pyx_v_ws_opts == NULL);
    if (unlikely(__pyx_t_2)) {
/* … */
    }
+12976:                 raise MemoryError()
      PyErr_NoMemory(); __PYX_ERR(0, 12976, __pyx_L1_error)
+12977:             src.opts = ws_opts
    __pyx_v_src.opts = __pyx_v_ws_opts;
+12978:             ws_b = qdb_pystr_buf_new()
    __pyx_v_ws_b = qdb_pystr_buf_new();
+12979:             ws_plan = dataframe_plan_blank()
    __pyx_v_ws_plan = __pyx_f_7questdb_7_client_dataframe_plan_blank();
+12980:             try:
    /*try:*/ {
+12981:                 _direct_dataframe_run(
      __pyx_t_1 = __pyx_f_7questdb_7_client__direct_dataframe_run((&__pyx_v_src), 0.0, __pyx_v_ws_b, (&__pyx_v_ws_plan), __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at, __pyx_t_8, __pyx_v_schema_overrides, __pyx_t_3); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 12981, __pyx_L8_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 12982:                     &src,
 12983:                     0.0,
 12984:                     ws_b,
 12985:                     &ws_plan,
 12986:                     df,
 12987:                     table_name,
 12988:                     table_name_col,
 12989:                     symbols,
 12990:                     at,
+12991:                     max_rows_per_batch,
      __pyx_t_8 = __Pyx_PyLong_As_size_t(__pyx_v_max_rows_per_batch); if (unlikely((__pyx_t_8 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 12991, __pyx_L8_error)
 12992:                     schema_overrides,
+12993:                     self._oidc_auth)
      __pyx_t_3 = __pyx_v_self->_oidc_auth;
      __Pyx_INCREF(__pyx_t_3);
+12994:                 return self
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF((PyObject *)__pyx_v_self);
      __pyx_r = ((PyObject *)__pyx_v_self);
      goto __pyx_L7_return;
    }
 12995:             finally:
+12996:                 qdb_pystr_buf_free(ws_b)
    /*finally:*/ {
      __pyx_L8_error:;
      /*exception exit:*/{
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 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_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
         __Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
        if ( unlikely(__Pyx_GetException(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14) < 0)) __Pyx_ErrFetch(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
        __Pyx_XGOTREF(__pyx_t_12);
        __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_t_9 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_11 = __pyx_filename;
        {
          qdb_pystr_buf_free(__pyx_v_ws_b);
/* … */
        qdb_pystr_buf_free(__pyx_v_ws_b);
+12997:                 if ws_opts != NULL:
          __pyx_t_2 = (__pyx_v_ws_opts != NULL);
          if (__pyx_t_2) {
/* … */
          }
/* … */
        __pyx_t_2 = (__pyx_v_ws_opts != NULL);
        if (__pyx_t_2) {
/* … */
        }
 12998:                     # The clone shares the sender's callback dispatcher
 12999:                     # threads. After a `close()` during this call it is
 13000:                     # their last owner, and freeing it joins them; a
 13001:                     # callback still running needs the GIL to finish, so
 13002:                     # the free runs without it, as in `Sender._close()`.
+13003:                     _ensure_doesnt_have_gil(&gs)
            (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
/* … */
          (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+13004:                     line_sender_opts_free(ws_opts)
            line_sender_opts_free(__pyx_v_ws_opts);
/* … */
          line_sender_opts_free(__pyx_v_ws_opts);
+13005:                     _ensure_has_gil(&gs)
            __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
/* … */
          __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+13006:                 _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(0, 13006, __pyx_L11_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);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_ErrRestore(__pyx_t_12, __pyx_t_13, __pyx_t_14);
        __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
        __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_11;
        goto __pyx_L1_error;
        __pyx_L11_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);
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
        goto __pyx_L1_error;
      }
      __pyx_L7_return: {
        __pyx_t_17 = __pyx_r;
        __pyx_r = 0;
/* … */
        __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(0, 13006, __pyx_L1_error)
        __pyx_r = __pyx_t_17;
        __pyx_t_17 = 0;
        goto __pyx_L0;
      }
    }
+13007:         if schema_overrides is not None:
  __pyx_t_2 = (__pyx_v_schema_overrides != ((PyObject*)Py_None));
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+13008:             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(0, 13008, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
+13009:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13009, __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(0, 13009, __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_schema_overrides_is_applied_when};
      __pyx_t_3 = __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_3)) __PYX_ERR(0, 13008, __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(0, 13008, __pyx_L1_error)
 13010:                 'schema_overrides is applied when a frame is written a '
 13011:                 'column at a time, which is Sender.dataframe() over '
 13012:                 'ws:: / wss:: and QuestDB.dataframe(). This sender '
 13013:                 'writes a row at a time. Drop the argument, or connect '
 13014:                 'over ws:: / wss::.')
+13015:         if self._in_txn:
  if (unlikely(__pyx_v_self->_in_txn)) {
/* … */
  }
+13016:             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(0, 13016, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
+13017:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13017, __pyx_L1_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(0, 13017, __pyx_L1_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_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_4, __pyx_mstate_global->__pyx_kp_u_Cannot_append_rows_explicitly_in};
      __pyx_t_3 = __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_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13016, __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(0, 13016, __pyx_L1_error)
 13018:                 'Cannot append rows explicitly inside a transaction')
+13019:         if at is None:
  __pyx_t_2 = (__pyx_v_at == Py_None);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+13020:             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(0, 13020, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+13021:                 QuestDBErrorCode.InvalidTimestamp,
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13021, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13021, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_8 = 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_8 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_5, __pyx_mstate_global->__pyx_kp_u_at_must_be_of_type_TimestampNan};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __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_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13020, __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(0, 13020, __pyx_L1_error)
 13022:                 "`at` must be of type TimestampNanos, datetime, or ServerTimestamp"
 13023:             )
+13024:         if self._auto_flush_mode.enabled:
  if (__pyx_v_self->_auto_flush_mode.enabled) {
/* … */
  }
 13025:             # The field, not its contents: see `auto_flush_t`. `self` is
 13026:             # this call's receiver and outlives the run, so the address
 13027:             # stays good even when a mid-frame `close()` empties it.
+13028:             af.sender_slot = &self._impl
    __pyx_v_af.sender_slot = (&__pyx_v_self->_impl);
+13029:             af.mode = self._auto_flush_mode
    __pyx_t_18 = __pyx_v_self->_auto_flush_mode;
    __pyx_v_af.mode = __pyx_t_18;
+13030:             af.last_flush_ms = self._last_flush_ms
    __pyx_t_19 = __pyx_v_self->_last_flush_ms;
    __pyx_v_af.last_flush_ms = __pyx_t_19;
 13031: 
+13032:         if self._buffer is None:
  __pyx_t_2 = (((PyObject *)__pyx_v_self->_buffer) == Py_None);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+13033:             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(0, 13033, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
+13034:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13034, __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(0, 13034, __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_dataframe_can_t_be_called_Sender};
      __pyx_t_3 = __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_3)) __PYX_ERR(0, 13033, __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(0, 13033, __pyx_L1_error)
 13035:                 "dataframe() can\'t be called: Sender is closed."
 13036:             )
+13037:         cdef bint outer_in_flight = self._enter_native()
  __pyx_v_outer_in_flight = __pyx_f_7questdb_7_client_6Sender__enter_native(__pyx_v_self);
+13038:         self._buffer._begin_frame_borrow()
  __pyx_f_7questdb_7_client_6Buffer__begin_frame_borrow(__pyx_v_self->_buffer);
+13039:         try:
  /*try:*/ {
+13040:             _dataframe(
    __pyx_t_1 = __pyx_f_7questdb_7_client__dataframe(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_3), __pyx_v_af, __pyx_v_self->_buffer->_impl, __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13040, __pyx_L20_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
+13041:                 self._buffer,
    __pyx_t_3 = ((PyObject *)__pyx_v_self->_buffer);
    __Pyx_INCREF(__pyx_t_3);
 13042:                 af,
 13043:                 self._buffer._impl,
 13044:                 df,
 13045:                 table_name,
 13046:                 table_name_col,
 13047:                 symbols,
 13048:                 at)
 13049:         finally:
+13050:             self._buffer._end_frame_borrow()
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_f_7questdb_7_client_6Buffer__end_frame_borrow(__pyx_v_self->_buffer);
/* … */
        __pyx_f_7questdb_7_client_6Buffer__end_frame_borrow(__pyx_v_self->_buffer);
+13051:             self._exit_native(outer_in_flight)
      __pyx_f_7questdb_7_client_6Sender__exit_native(__pyx_v_self, __pyx_v_outer_in_flight);
/* … */
        __pyx_f_7questdb_7_client_6Sender__exit_native(__pyx_v_self, __pyx_v_outer_in_flight);
+13052:             _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(0, 13052, __pyx_L1_error)
      goto __pyx_L21;
    }
    __pyx_L20_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0; __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_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_14, &__pyx_t_13, &__pyx_t_12);
      if ( unlikely(__Pyx_GetException(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15) < 0)) __Pyx_ErrFetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15);
      __Pyx_XGOTREF(__pyx_t_17);
      __Pyx_XGOTREF(__pyx_t_16);
      __Pyx_XGOTREF(__pyx_t_15);
      __Pyx_XGOTREF(__pyx_t_14);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_12);
      __pyx_t_10 = __pyx_lineno; __pyx_t_9 = __pyx_clineno; __pyx_t_20 = __pyx_filename;
      {
/* … */
        __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(0, 13052, __pyx_L23_error)
      }
      __Pyx_XGIVEREF(__pyx_t_14);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_ExceptionReset(__pyx_t_14, __pyx_t_13, __pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_17);
      __Pyx_XGIVEREF(__pyx_t_16);
      __Pyx_XGIVEREF(__pyx_t_15);
      __Pyx_ErrRestore(__pyx_t_17, __pyx_t_16, __pyx_t_15);
      __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0;
      __pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_9; __pyx_filename = __pyx_t_20;
      goto __pyx_L1_error;
      __pyx_L23_error:;
      __Pyx_XGIVEREF(__pyx_t_14);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_ExceptionReset(__pyx_t_14, __pyx_t_13, __pyx_t_12);
      __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L21:;
  }
+13053:         return self
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;
 13054: 
+13055:     cpdef flush(
static PyObject *__pyx_pw_7questdb_7_client_6Sender_29flush(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 PyObject *__pyx_f_7questdb_7_client_6Sender_flush(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_7questdb_7_client_6Sender_flush *__pyx_optional_args) {
/* … */
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_flush); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13055, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7questdb_7_client_6Sender_29flush)) {
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = __Pyx_PyBool_FromLong(__pyx_v_clear); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13055, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_v_transactional); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13055, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __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[4] = {__pyx_t_3, ((PyObject *)__pyx_v_buffer), __pyx_t_5, __pyx_t_6};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (4-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 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(0, 13055, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }
/* … */
  /* 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_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("questdb._client.Sender.flush", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_active_buf);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_29flush(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_28flush, "\n        If called with no arguments, immediately flushes the internal buffer.\n\n        Alternatively you can flush a buffer that was constructed explicitly\n        by passing ``buffer``.\n\n        The buffer will be cleared by default, unless ``clear`` is set to\n        ``False``.\n\n        This method does nothing if the provided or internal buffer is empty.\n\n        :param buffer: The buffer to flush. If ``None``, the internal buffer\n            is flushed.\n\n        With QWP/WebSocket, this publishes the buffer into the local sender\n        queue and returns before the server necessarily ACKs the frame. Later\n        terminal diagnostics fail subsequent sender calls and are available as\n        :attr:`QuestDBError.sender_error`. Server diagnostics are also\n        available through :func:`Sender.poll_error`.\n\n        :param clear: If ``True``, the flushed buffer is cleared (default).\n            If ``False``, the flushed buffer is left in the internal buffer.\n            Note that ``clear=False`` is only supported if ``buffer`` is also\n            specified.\n\n        :param transactional: If ``True`` ensures that the flushed buffer\n            contains row for a single table, ensuring all data can be written\n            transactionally. This feature requires ILP/HTTP and is not available\n            when connecting over TCP. *Default: False.*\n\n        If the flush fails, the internal buffer is cleared, rows and all; a\n        buffer passed as ``buffer`` is left as it is. Over QWP/WebSocket a\n        buffer is published as one frame, and one whose encoded frame\n        exceeds the connection's frame cap raises\n        :class:`QuestDBError <questdb.QuestDBError>` (``BatchTooLarge``)\n        without publishing anything.\n\n        The Python GIL is released during the network IO operation.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_29flush = {"flush", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_29flush, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_28flush};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_29flush(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
) {
  struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer = 0;
  int __pyx_v_clear;
  int __pyx_v_transactional;
  #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("flush (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_buffer,&__pyx_mstate_global->__pyx_n_u_clear,&__pyx_mstate_global->__pyx_n_u_transactional,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(0, 13055, __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(0, 13055, __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(0, 13055, __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(0, 13055, __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, "flush", 0) < (0)) __PYX_ERR(0, 13055, __pyx_L3_error)
/* … */
  /* 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_6Sender_28flush(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer, int __pyx_v_clear, int __pyx_v_transactional) {
  PyObject *__pyx_r = NULL;
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.buffer = __pyx_v_buffer;
  __pyx_t_2.clear = __pyx_v_clear;
  __pyx_t_2.transactional = __pyx_v_transactional;
  __pyx_t_1 = __pyx_vtabptr_7questdb_7_client_Sender->flush(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13055, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client.Sender.flush", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_29flush, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_flush, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[233])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 13055, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_17, __pyx_mstate_global->__pyx_tuple[55]);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_flush, __pyx_t_17) < (0)) __PYX_ERR(0, 13055, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
/* … */
  __pyx_mstate_global->__pyx_tuple[55] = PyTuple_Pack(3, Py_None, Py_True, Py_False); if (unlikely(!__pyx_mstate_global->__pyx_tuple[55])) __PYX_ERR(0, 13055, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[55]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[55]);
/* … */
struct __pyx_opt_args_7questdb_7_client_6Sender_flush {
  int __pyx_n;
  struct __pyx_obj_7questdb_7_client_Buffer *buffer;
  int clear;
  int transactional;
};
 13056:             self,
+13057:             Buffer buffer=None,
  struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer = ((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None);
/* … */
      if (!values[0]) values[0] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None));
    } else {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 13055, __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(0, 13055, __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(0, 13055, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[0]) values[0] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None));
    }
    __pyx_v_buffer = ((struct __pyx_obj_7questdb_7_client_Buffer *)values[0]);
    if (values[1]) {
      __pyx_v_clear = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_clear == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 13058, __pyx_L3_error)
    } else {
+13058:             bint clear=True,
  int __pyx_v_clear = ((int)1);
/* … */
      __pyx_v_clear = ((int)1);
    }
    if (values[2]) {
      __pyx_v_transactional = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_transactional == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 13059, __pyx_L3_error)
    } else {
+13059:             bint transactional=False):
  int __pyx_v_transactional = ((int)0);
  struct line_sender_buffer *__pyx_v_c_buf;
  struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_active_buf = 0;
  int __pyx_v_exclusive;
  PyObject *__pyx_r = NULL;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_buffer = __pyx_optional_args->buffer;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_clear = __pyx_optional_args->clear;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_transactional = __pyx_optional_args->transactional;
        }
      }
    }
  }
/* … */
      __pyx_v_transactional = ((int)0);
    }
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("flush", 0, 0, 3, __pyx_nargs); __PYX_ERR(0, 13055, __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.Sender.flush", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_buffer), __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, 1, "buffer", 0))) __PYX_ERR(0, 13057, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_28flush(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), __pyx_v_buffer, __pyx_v_clear, __pyx_v_transactional);
 13060:         """
 13061:         If called with no arguments, immediately flushes the internal buffer.
 13062: 
 13063:         Alternatively you can flush a buffer that was constructed explicitly
 13064:         by passing ``buffer``.
 13065: 
 13066:         The buffer will be cleared by default, unless ``clear`` is set to
 13067:         ``False``.
 13068: 
 13069:         This method does nothing if the provided or internal buffer is empty.
 13070: 
 13071:         :param buffer: The buffer to flush. If ``None``, the internal buffer
 13072:             is flushed.
 13073: 
 13074:         With QWP/WebSocket, this publishes the buffer into the local sender
 13075:         queue and returns before the server necessarily ACKs the frame. Later
 13076:         terminal diagnostics fail subsequent sender calls and are available as
 13077:         :attr:`QuestDBError.sender_error`. Server diagnostics are also
 13078:         available through :func:`Sender.poll_error`.
 13079: 
 13080:         :param clear: If ``True``, the flushed buffer is cleared (default).
 13081:             If ``False``, the flushed buffer is left in the internal buffer.
 13082:             Note that ``clear=False`` is only supported if ``buffer`` is also
 13083:             specified.
 13084: 
 13085:         :param transactional: If ``True`` ensures that the flushed buffer
 13086:             contains row for a single table, ensuring all data can be written
 13087:             transactionally. This feature requires ILP/HTTP and is not available
 13088:             when connecting over TCP. *Default: False.*
 13089: 
 13090:         If the flush fails, the internal buffer is cleared, rows and all; a
 13091:         buffer passed as ``buffer`` is left as it is. Over QWP/WebSocket a
 13092:         buffer is published as one frame, and one whose encoded frame
 13093:         exceeds the connection's frame cap raises
 13094:         :class:`QuestDBError <questdb.QuestDBError>` (``BatchTooLarge``)
 13095:         without publishing anything.
 13096: 
 13097:         The Python GIL is released during the network IO operation.
 13098:         """
+13099:         cdef line_sender_buffer* c_buf = NULL
  __pyx_v_c_buf = NULL;
 13100:         cdef Buffer active_buf
 13101:         # Only a clearing flush modifies the buffer; a kept flush borrows it
 13102:         # read-only (`const line_sender_buffer*`), so concurrent reads and
 13103:         # other kept flushes of the same buffer stay allowed.
+13104:         cdef bint exclusive = clear
  __pyx_v_exclusive = __pyx_v_clear;
 13105: 
+13106:         self._check_not_in_own_callback('flush')
  __pyx_t_8 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush, NULL); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13106, __pyx_L1_error)
 13107: 
+13108:         if self._in_txn:
  if (unlikely(__pyx_v_self->_in_txn)) {
/* … */
  }
+13109:             raise QuestDBError(
    __pyx_t_2 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13109, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+13110:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13110, __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(0, 13110, __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_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_7 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Cannot_flush_explicitly_inside_a};
      __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_2); __pyx_t_2 = 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(0, 13109, __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(0, 13109, __pyx_L1_error)
 13111:                 'Cannot flush explicitly inside a transaction')
 13112: 
+13113:         if buffer is None and not clear:
  __pyx_t_10 = (((PyObject *)__pyx_v_buffer) == Py_None);
  if (__pyx_t_10) {
  } else {
    __pyx_t_9 = __pyx_t_10;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_10 = (!__pyx_v_clear);
  __pyx_t_9 = __pyx_t_10;
  __pyx_L5_bool_binop_done:;
  if (unlikely(__pyx_t_9)) {
/* … */
  }
+13114:             raise ValueError('The internal buffer must always be cleared.')
    __pyx_t_4 = NULL;
    __pyx_t_7 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_The_internal_buffer_must_always};
      __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_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13114, __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(0, 13114, __pyx_L1_error)
 13115: 
+13116:         if self._impl == NULL:
  __pyx_t_9 = (__pyx_v_self->_impl == NULL);
  if (unlikely(__pyx_t_9)) {
/* … */
  }
+13117:             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(0, 13117, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
+13118:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13118, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13118, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_7 = 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_7 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_flush_can_t_be_called_Sender_is};
      __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_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(0, 13117, __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(0, 13117, __pyx_L1_error)
 13119:                 'flush() can\'t be called: Sender is closed.')
+13120:         if buffer is not None:
  __pyx_t_9 = (((PyObject *)__pyx_v_buffer) != Py_None);
  if (__pyx_t_9) {
/* … */
    goto __pyx_L8;
  }
+13121:             if exclusive:
    if (__pyx_v_exclusive) {
/* … */
      goto __pyx_L9;
    }
+13122:                 buffer._check_impl()
      __pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__check_impl(__pyx_v_buffer); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13122, __pyx_L1_error)
 13123:             else:
+13124:                 buffer._check_readable()
    /*else*/ {
      __pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__check_readable(__pyx_v_buffer); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13124, __pyx_L1_error)
    }
    __pyx_L9:;
+13125:             self._check_buffer_protocol(buffer)
    __pyx_t_8 = __pyx_f_7questdb_7_client_6Sender__check_buffer_protocol(__pyx_v_self, __pyx_v_buffer); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13125, __pyx_L1_error)
+13126:             c_buf = buffer._impl
    __pyx_t_11 = __pyx_v_buffer->_impl;
    __pyx_v_c_buf = __pyx_t_11;
 13127:         else:
+13128:             c_buf = self._buffer._impl
  /*else*/ {
    __pyx_t_11 = __pyx_v_self->_buffer->_impl;
    __pyx_v_c_buf = __pyx_t_11;
  }
  __pyx_L8:;
 13129:         # Refused before the flush is attempted, and before the GIL is
 13130:         # released: a flush of a half-written row cannot succeed, and
 13131:         # the failure path clears the internal buffer, which would take
 13132:         # every finished row already in it with the part-written one.
+13133:         (buffer if buffer is not None else self._buffer)._check_not_in_row(
  __pyx_t_9 = (((PyObject *)__pyx_v_buffer) != Py_None);
  if (__pyx_t_9) {
    __Pyx_INCREF((PyObject *)__pyx_v_buffer);
    __pyx_t_1 = ((PyObject *)__pyx_v_buffer);
  } else {
    __Pyx_INCREF((PyObject *)__pyx_v_self->_buffer);
    __pyx_t_1 = ((PyObject *)__pyx_v_self->_buffer);
  }
  __pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_1), __pyx_mstate_global->__pyx_n_u_flush, NULL); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13133, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 13134:             'flush')
+13135:         if line_sender_buffer_size(c_buf) == 0 and not _is_qwp_ws_protocol(self._c_protocol):
  __pyx_t_10 = (line_sender_buffer_size(__pyx_v_c_buf) == 0);
  if (__pyx_t_10) {
  } else {
    __pyx_t_9 = __pyx_t_10;
    goto __pyx_L11_bool_binop_done;
  }
  __pyx_t_10 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_10 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 13135, __pyx_L1_error)
  __pyx_t_12 = (!__pyx_t_10);
  __pyx_t_9 = __pyx_t_12;
  __pyx_L11_bool_binop_done:;
  if (__pyx_t_9) {
/* … */
  }
+13136:             return
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+13137:         active_buf = buffer if buffer is not None else self._buffer
  __pyx_t_9 = (((PyObject *)__pyx_v_buffer) != Py_None);
  if (__pyx_t_9) {
    __Pyx_INCREF((PyObject *)__pyx_v_buffer);
    __pyx_t_1 = ((PyObject *)__pyx_v_buffer);
  } else {
    __Pyx_INCREF((PyObject *)__pyx_v_self->_buffer);
    __pyx_t_1 = ((PyObject *)__pyx_v_self->_buffer);
  }
  __pyx_v_active_buf = ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_1);
  __pyx_t_1 = 0;
+13138:         self._flush_c_buf(active_buf, clear, transactional, False)
  __pyx_t_8 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_self->__pyx_vtab)->_flush_c_buf(__pyx_v_self, __pyx_v_active_buf, __pyx_v_clear, __pyx_v_transactional, 0); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13138, __pyx_L1_error)
 13139: 
+13140:     cdef void_int _flush_c_buf(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Sender__flush_c_buf(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_active_buf, int __pyx_v_clear, int __pyx_v_transactional, int __pyx_v_keep_on_batch_too_large) {
  struct line_sender *__pyx_v_sender;
  struct line_sender_buffer *__pyx_v_c_buf;
  struct line_sender_error *__pyx_v_err;
  PyThreadState *__pyx_v_gs;
  int __pyx_v_ok;
  PyObject *__pyx_v_exc = 0;
  int __pyx_v_exclusive;
  int __pyx_v_outer_in_flight;
  __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_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.Sender._flush_c_buf", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 13141:             self,
 13142:             Buffer active_buf,
 13143:             bint clear,
 13144:             bint transactional,
 13145:             bint keep_on_batch_too_large) except -1:
 13146:         """
 13147:         Flush `active_buf`, which the caller has checked against this
 13148:         sender, with the GIL released.
 13149: 
 13150:         A failed flush of the internal buffer clears it. With
 13151:         `keep_on_batch_too_large`, a `BatchTooLarge` refusal leaves it
 13152:         intact instead: that refusal publishes nothing and leaves the sender
 13153:         usable, so the caller can rewind the row it just added and publish
 13154:         the rest.
 13155:         """
+13156:         cdef line_sender* sender = self._impl
  __pyx_t_1 = __pyx_v_self->_impl;
  __pyx_v_sender = __pyx_t_1;
+13157:         cdef line_sender_buffer* c_buf = active_buf._impl
  __pyx_t_2 = __pyx_v_active_buf->_impl;
  __pyx_v_c_buf = __pyx_t_2;
+13158:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+13159:         cdef PyThreadState* gs = NULL  # GIL state. NULL means we have the GIL.
  __pyx_v_gs = NULL;
+13160:         cdef bint ok = False
  __pyx_v_ok = 0;
 13161:         cdef object exc
 13162:         # Only a clearing flush modifies the buffer; a kept flush borrows it
 13163:         # read-only, as `flush()` checked it.
+13164:         cdef bint exclusive = clear
  __pyx_v_exclusive = __pyx_v_clear;
 13165: 
 13166:         # Every publish of this sender's rows comes through here, including
 13167:         # auto-flush from `row()`, so the re-entry guard lives here too.
+13168:         self._check_not_in_own_callback('flush')
  __pyx_t_3 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush, NULL); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13168, __pyx_L1_error)
+13169:         if sender == NULL:
  __pyx_t_4 = (__pyx_v_sender == NULL);
  if (unlikely(__pyx_t_4)) {
/* … */
  }
+13170:             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(0, 13170, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
+13171:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13171, __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(0, 13171, __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_flush_can_t_be_called_Sender_is};
      __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(0, 13170, __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(0, 13170, __pyx_L1_error)
 13172:                 'flush() can\'t be called: Sender is closed.')
 13173:         # Every flush passes here, so a dictionary that another read of
 13174:         # `__dict__` recreated slows `row()` only until the next one.
+13175:         _sender_drop_unused_dict(self)
  __pyx_f_7questdb_7_client__sender_drop_unused_dict(__pyx_v_self);
 13176: 
 13177:         # Publish the guard before releasing the GIL: while native holds
 13178:         # `&mut Sender` and a borrowed pointer to `c_buf`, another thread must
 13179:         # not free the sender or mutate its buffer. OIDC diagnostics can also
 13180:         # re-enter Python on this thread meanwhile, and a logging or signal
 13181:         # handler there must not do either.
+13182:         cdef bint outer_in_flight = self._enter_native()
  __pyx_v_outer_in_flight = __pyx_f_7questdb_7_client_6Sender__enter_native(__pyx_v_self);
+13183:         active_buf._begin_native_borrow(exclusive)
  __pyx_f_7questdb_7_client_6Buffer__begin_native_borrow(__pyx_v_active_buf, __pyx_v_exclusive);
 13184:         # We might be blocking on IO, so temporarily release the GIL.
+13185:         _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+13186:         if transactional:
  if (__pyx_v_transactional) {
/* … */
    goto __pyx_L4;
  }
+13187:             ok = line_sender_flush_and_keep_with_flags(
    __pyx_v_ok = line_sender_flush_and_keep_with_flags(__pyx_v_sender, __pyx_v_c_buf, __pyx_v_transactional, (&__pyx_v_err));
 13188:                     sender,
 13189:                     c_buf,
 13190:                     transactional,
 13191:                     &err)
+13192:             if ok and clear:
    if (__pyx_v_ok) {
    } else {
      __pyx_t_4 = __pyx_v_ok;
      goto __pyx_L6_bool_binop_done;
    }
    __pyx_t_4 = __pyx_v_clear;
    __pyx_L6_bool_binop_done:;
    if (__pyx_t_4) {
/* … */
    }
+13193:                 line_sender_buffer_clear(c_buf)
      line_sender_buffer_clear(__pyx_v_c_buf);
+13194:         elif clear:
  if (__pyx_v_clear) {
/* … */
    goto __pyx_L4;
  }
+13195:             ok = line_sender_flush(sender, c_buf, &err)
    __pyx_v_ok = line_sender_flush(__pyx_v_sender, __pyx_v_c_buf, (&__pyx_v_err));
 13196:         else:
+13197:             ok = line_sender_flush_and_keep(sender, c_buf, &err)
  /*else*/ {
    __pyx_v_ok = line_sender_flush_and_keep(__pyx_v_sender, __pyx_v_c_buf, (&__pyx_v_err));
  }
  __pyx_L4:;
+13198:         _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+13199:         active_buf._end_native_borrow(exclusive)
  __pyx_f_7questdb_7_client_6Buffer__end_native_borrow(__pyx_v_active_buf, __pyx_v_exclusive);
+13200:         self._exit_native(outer_in_flight)
  __pyx_f_7questdb_7_client_6Sender__exit_native(__pyx_v_self, __pyx_v_outer_in_flight);
+13201:         if ok and c_buf == self._buffer._impl:
  if (__pyx_v_ok) {
  } else {
    __pyx_t_4 = __pyx_v_ok;
    goto __pyx_L9_bool_binop_done;
  }
  __pyx_t_11 = (__pyx_v_c_buf == __pyx_v_self->_buffer->_impl);
  __pyx_t_4 = __pyx_t_11;
  __pyx_L9_bool_binop_done:;
  if (__pyx_t_4) {
/* … */
  }
+13202:             self._last_flush_ms[0] = line_sender_now_micros() // 1000
    (__pyx_v_self->_last_flush_ms[0]) = __Pyx_div_int64_t(line_sender_now_micros(), 0x3E8, 1);
+13203:         if not ok:
  __pyx_t_4 = (!__pyx_v_ok);
  if (__pyx_t_4) {
/* … */
  }
 13204:             # Cleared before the error is converted, deciding from the native
 13205:             # code: converting it runs Python -- an `OidcError` constructor,
 13206:             # the re-raise of a parked signal -- where a pending signal
 13207:             # handler's exception would otherwise skip the clear.
+13208:             if c_buf == self._buffer._impl and not (
    __pyx_t_11 = (__pyx_v_c_buf == __pyx_v_self->_buffer->_impl);
    if (__pyx_t_11) {
    } else {
      __pyx_t_4 = __pyx_t_11;
      goto __pyx_L13_bool_binop_done;
    }
/* … */
    __pyx_t_12 = (!__pyx_t_11);
    __pyx_t_4 = __pyx_t_12;
    __pyx_L13_bool_binop_done:;
    if (__pyx_t_4) {
/* … */
    }
+13209:                     keep_on_batch_too_large and err != NULL and
    if (__pyx_v_keep_on_batch_too_large) {
    } else {
      __pyx_t_11 = __pyx_v_keep_on_batch_too_large;
      goto __pyx_L15_bool_binop_done;
    }
    __pyx_t_12 = (__pyx_v_err != NULL);
    if (__pyx_t_12) {
    } else {
      __pyx_t_11 = __pyx_t_12;
      goto __pyx_L15_bool_binop_done;
    }
 13210:                     line_sender_error_get_code(err)
+13211:                         == line_sender_error_batch_too_large):
    __pyx_t_12 = (line_sender_error_get_code(__pyx_v_err) == line_sender_error_batch_too_large);
    __pyx_t_11 = __pyx_t_12;
    __pyx_L15_bool_binop_done:;
 13212:                 # Prevent a follow-up call to `.close(flush=True)` (as is
 13213:                 # usually called from `__exit__`) to raise after the sender
 13214:                 # entered an error state following a failed call to `.flush()`.
 13215:                 #
 13216:                 # Cleared for every failure but a `BatchTooLarge` refusal
 13217:                 # under `keep_on_batch_too_large`, which `row()` settles
 13218:                 # before it returns: it takes its newest row back out and
 13219:                 # publishes or discards the rest (see `_qwp_row_append`).
 13220:                 # The internal buffer is shared state that
 13221:                 # `may_flush_on_row_complete`, `SenderTransaction.__enter__`
 13222:                 # / `.commit()` and `close(flush=True)` all read as
 13223:                 # "unflushed rows, publish at the next opportunity", so rows
 13224:                 # left here do not wait for the caller: an auto-flush
 13225:                 # discards them, a transaction publishes them without its
 13226:                 # own transactional framing, and `__exit__` re-raises. A
 13227:                 # caller who wants to republish a failed batch after
 13228:                 # recovering owns the buffer instead --
 13229:                 # `buf = sender.new_buffer()` then `sender.flush(buf,
 13230:                 # clear=False)`, which keeps `buf` intact on ANY error and is
 13231:                 # invisible to all of the above.
 13232:                 # Note: For the internal buffer `clear` is always `True`.
+13233:                 line_sender_buffer_clear(c_buf)
      line_sender_buffer_clear(__pyx_v_c_buf);
+13234:             if _is_tcp_protocol(self._c_protocol):
    __pyx_t_4 = __pyx_f_7questdb_7_client__is_tcp_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_4 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 13234, __pyx_L1_error)
    if (__pyx_t_4) {
/* … */
      goto __pyx_L18;
    }
 13235:                 # Provide further context pointing to the logs.
+13236:                 exc = c_err_to_py_fmt(err, _FLUSH_FMT)
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_FLUSH_FMT); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13236, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (!(likely(PyUnicode_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_5))) __PYX_ERR(0, 13236, __pyx_L1_error)
      __pyx_t_7 = __pyx_f_7questdb_7_client_c_err_to_py_fmt(__pyx_v_err, ((PyObject*)__pyx_t_5)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13236, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_v_exc = __pyx_t_7;
      __pyx_t_7 = 0;
 13237:             else:
+13238:                 exc = c_err_to_py(err)
    /*else*/ {
      __pyx_t_7 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13238, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_v_exc = __pyx_t_7;
      __pyx_t_7 = 0;
    }
    __pyx_L18:;
+13239:             raise exc
    __Pyx_Raise(__pyx_v_exc, 0, 0, 0);
    __PYX_ERR(0, 13239, __pyx_L1_error)
 13240:         # Native errors above are consumed before the fallback raises. On
 13241:         # success all sender/buffer borrows have already been released.
+13242:         _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(0, 13242, __pyx_L1_error)
 13243: 
+13244:     cdef inline bint _enter_native(self) noexcept:
static CYTHON_INLINE int __pyx_f_7questdb_7_client_6Sender__enter_native(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
  int __pyx_v_outer;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 13245:         """Mark a native call borrowing this sender as in progress. Returns
 13246:         the previous state, for the matching `_exit_native`."""
+13247:         cdef bint outer = self._native_in_flight
  __pyx_t_1 = __pyx_v_self->_native_in_flight;
  __pyx_v_outer = __pyx_t_1;
+13248:         self._native_in_flight = True
  __pyx_v_self->_native_in_flight = 1;
+13249:         return outer
  __pyx_r = __pyx_v_outer;
  goto __pyx_L0;
 13250: 
+13251:     cdef inline void _exit_native(self, bint outer) noexcept:
static CYTHON_INLINE void __pyx_f_7questdb_7_client_6Sender__exit_native(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, int __pyx_v_outer) {
/* … */
  /* function exit code */
}
 13252:         # Restored, not cleared: a call made from Python that a `dataframe()`
 13253:         # runs -- a flush of another buffer -- must leave the frame's guard
 13254:         # up for the rest of the frame.
+13255:         self._native_in_flight = outer
  __pyx_v_self->_native_in_flight = __pyx_v_outer;
 13256: 
+13257:     cdef inline void_int _check_not_in_own_callback(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, PyObject *__pyx_v_method, struct __pyx_opt_args_7questdb_7_client_6Sender__check_not_in_own_callback *__pyx_optional_args) {
/* … */
  /* 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_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("questdb._client.Sender._check_not_in_own_callback", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_7questdb_7_client_6Sender__check_not_in_own_callback {
  int __pyx_n;
  int allow_idle_callback;
};
+13258:             self, str method, bint allow_idle_callback=False) except -1:
  int __pyx_v_allow_idle_callback = ((int)0);
  __pyx_t_7questdb_7_client_void_int __pyx_r;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_allow_idle_callback = __pyx_optional_args->allow_idle_callback;
    }
  }
 13259:         # A frame serialized into this sender's buffer holds the sender for
 13260:         # the whole call; Python the frame itself runs on this thread is let
 13261:         # through to the buffer's own row rules (see
 13262:         # `Buffer._reentered_from_frame`).
+13263:         if self._native_in_flight and not (
  if (__pyx_v_self->_native_in_flight) {
  } else {
    __pyx_t_1 = __pyx_v_self->_native_in_flight;
    goto __pyx_L4_bool_binop_done;
  }
/* … */
  __pyx_t_3 = (!__pyx_t_2);
  __pyx_t_1 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+13264:                 self._buffer is not None
  __pyx_t_3 = (((PyObject *)__pyx_v_self->_buffer) != Py_None);
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L6_bool_binop_done;
  }
+13265:                 and self._buffer._reentered_from_frame()):
  __pyx_t_3 = ((struct __pyx_vtabstruct_7questdb_7_client_Buffer *)__pyx_v_self->_buffer->__pyx_vtab)->_reentered_from_frame(__pyx_v_self->_buffer); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 13265, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_3;
  __pyx_L6_bool_binop_done:;
+13266:             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(0, 13266, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
+13267:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13267, __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(0, 13267, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+13268:                 f'{method}() cannot be called while this sender is in a native '
    __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13268, __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_while_this_sen); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 13268, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_10 = 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_10 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_8, __pyx_t_9};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __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_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_4)) __PYX_ERR(0, 13266, __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(0, 13266, __pyx_L1_error)
 13269:                 'operation, including from code that runs inside it: a token '
 13270:                 'provider, an OIDC callback or a signal handler.')
 13271:         # Read-only getters are safe in an idle listener, but a native call
 13272:         # may hold a mutable borrow even while the listener is dispatched.
+13273:         if allow_idle_callback or (
  if (!__pyx_v_allow_idle_callback) {
  } else {
    __pyx_t_1 = __pyx_v_allow_idle_callback;
    goto __pyx_L9_bool_binop_done;
  }
/* … */
  if (__pyx_t_1) {
/* … */
  }
+13274:                 self._error_handler is None and self._connection_listener is None):
  __pyx_t_3 = (__pyx_v_self->_error_handler == Py_None);
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L9_bool_binop_done;
  }
  __pyx_t_3 = (__pyx_v_self->_connection_listener == Py_None);
  __pyx_t_1 = __pyx_t_3;
  __pyx_L9_bool_binop_done:;
+13275:             return 0
    __pyx_r = 0;
    goto __pyx_L0;
 13276:         # Native QWP/WebSocket callback dispatch keeps this sender borrowed.
 13277:         # Reentering the exact owner from either of its callbacks would alias
 13278:         # or free the live sender and abort the process. A callback function
 13279:         # shared with another sender does not carry this owner's token.
+13280:         if _dispatching_for(self._thread_owner_token):
  __pyx_t_4 = __pyx_v_self->_thread_owner_token;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_1 = __pyx_f_7questdb_7_client__dispatching_for(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+13281:             raise QuestDBError(
    __pyx_t_6 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 13281, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
+13282:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13282, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13282, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+13283:                 f'{method}() cannot be called from within this sender\'s own '
    __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13283, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_8, __pyx_mstate_global->__pyx_kp_u_cannot_be_called_from_within_th); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13283, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_10 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_9);
      assert(__pyx_t_6);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_9, __pyx__function);
      __pyx_t_10 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_5, __pyx_t_7};
      __pyx_t_4 = __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_6); __pyx_t_6 = 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_4)) __PYX_ERR(0, 13281, __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(0, 13281, __pyx_L1_error)
 13284:                 'error_handler or connection_listener callback.')
 13285: 
+13286:     cdef inline void_int _check_qwp_ws(self, str method) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, PyObject *__pyx_v_method) {
  __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_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_AddTraceback("questdb._client.Sender._check_qwp_ws", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+13287:         if self._impl == NULL:
  __pyx_t_1 = (__pyx_v_self->_impl == NULL);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+13288:             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(0, 13288, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+13289:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13289, __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(0, 13289, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+13290:                 f'{method}() can\'t be called: Sender is closed.')
    __pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13290, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_Sender_is_close); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13290, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_8 = 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_8 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_t_7};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__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_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13288, __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(0, 13288, __pyx_L1_error)
+13291:         if not _is_qwp_ws_protocol(self._c_protocol):
  __pyx_t_1 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 13291, __pyx_L1_error)
  __pyx_t_9 = (!__pyx_t_1);
  if (unlikely(__pyx_t_9)) {
/* … */
  }
+13292:             raise QuestDBError(
    __pyx_t_4 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13292, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
+13293:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13293, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13293, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+13294:                 f'{method}() is only supported for QWP/WebSocket senders.')
    __pyx_t_6 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13294, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_is_only_supported_for_QWP_WebSo); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13294, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __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_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_8 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_3, __pyx_t_5};
      __pyx_t_2 = __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_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 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(0, 13292, __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(0, 13292, __pyx_L1_error)
+13295:         self._check_not_in_own_callback(method)
  __pyx_t_10 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_v_method, NULL); if (unlikely(__pyx_t_10 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13295, __pyx_L1_error)
 13296: 
+13297:     cdef inline void_int _check_buffer_protocol(self, Buffer buffer) except -1:
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_6Sender__check_buffer_protocol(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer) {
  int __pyx_v_need_qwp;
  __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_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.Sender._check_buffer_protocol", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 13298:         cdef bint need_qwp = (
+13299:             _is_qwp_udp_protocol(self._c_protocol) or
  __pyx_t_2 = __pyx_f_7questdb_7_client__is_qwp_udp_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 13299, __pyx_L1_error)
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
+13300:             _is_qwp_ws_protocol(self._c_protocol))
  __pyx_t_2 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 13300, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_v_need_qwp = __pyx_t_1;
+13301:         if need_qwp and not buffer._qwp:
  if (__pyx_v_need_qwp) {
  } else {
    __pyx_t_1 = __pyx_v_need_qwp;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_2 = (!__pyx_v_buffer->_qwp);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L6_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+13302:             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(0, 13302, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
+13303:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13303, __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(0, 13303, __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_QWP_sender_requires_a_QWP_buffer};
      __pyx_t_3 = __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_3)) __PYX_ERR(0, 13302, __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(0, 13302, __pyx_L1_error)
 13304:                 'QWP sender requires a QWP buffer. Use Sender.new_buffer() '
 13305:                 'to build a matching buffer.')
+13306:         if buffer._qwp and not need_qwp:
  if (__pyx_v_buffer->_qwp) {
  } else {
    __pyx_t_1 = __pyx_v_buffer->_qwp;
    goto __pyx_L9_bool_binop_done;
  }
  __pyx_t_2 = (!__pyx_v_need_qwp);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L9_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+13307:             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(0, 13307, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
+13308:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13308, __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(0, 13308, __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_ILP_sender_requires_an_ILP_buffe};
      __pyx_t_3 = __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_3)) __PYX_ERR(0, 13307, __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(0, 13307, __pyx_L1_error)
 13309:                 'ILP sender requires an ILP buffer. Use Sender.new_buffer() '
 13310:                 'to build a matching buffer.')
 13311: 
+13312:     def flush_and_get_fsn(self, Buffer buffer=None):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_31flush_and_get_fsn(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_30flush_and_get_fsn, "\n        Publish a QWP/WebSocket buffer locally, clear it on success, and return\n        the assigned frame sequence number.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_31flush_and_get_fsn = {"flush_and_get_fsn", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_31flush_and_get_fsn, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_30flush_and_get_fsn};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_31flush_and_get_fsn(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
) {
  struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer = 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("flush_and_get_fsn (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_buffer,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(0, 13312, __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(0, 13312, __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, "flush_and_get_fsn", 0) < (0)) __PYX_ERR(0, 13312, __pyx_L3_error)
      if (!values[0]) values[0] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None));
    } else {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13312, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[0]) values[0] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None));
    }
    __pyx_v_buffer = ((struct __pyx_obj_7questdb_7_client_Buffer *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("flush_and_get_fsn", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 13312, __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.Sender.flush_and_get_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_buffer), __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, 1, "buffer", 0))) __PYX_ERR(0, 13312, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_30flush_and_get_fsn(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), __pyx_v_buffer);

  /* 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_6Sender_30flush_and_get_fsn(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer) {
  struct line_sender *__pyx_v_sender;
  struct line_sender_error *__pyx_v_err;
  struct line_sender_buffer *__pyx_v_c_buf;
  struct line_sender_qwpws_fsn __pyx_v_fsn;
  PyThreadState *__pyx_v_gs;
  int __pyx_v_ok;
  int __pyx_v_outer_in_flight;
  PyObject *__pyx_r = NULL;
  __Pyx_INCREF((PyObject *)__pyx_v_buffer);
/* … */
  /* 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.Sender.flush_and_get_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_buffer);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_31flush_and_get_fsn, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_flush_and_get_fsn, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[234])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 13312, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_17, __pyx_mstate_global->__pyx_tuple[24]);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_flush_and_get_fsn, __pyx_t_17) < (0)) __PYX_ERR(0, 13312, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 13313:         """
 13314:         Publish a QWP/WebSocket buffer locally, clear it on success, and return
 13315:         the assigned frame sequence number.
 13316:         """
+13317:         cdef line_sender* sender = self._impl
  __pyx_t_1 = __pyx_v_self->_impl;
  __pyx_v_sender = __pyx_t_1;
+13318:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+13319:         cdef line_sender_buffer* c_buf = NULL
  __pyx_v_c_buf = NULL;
 13320:         cdef line_sender_qwpws_fsn fsn
+13321:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+13322:         cdef bint ok = False
  __pyx_v_ok = 0;
 13323: 
+13324:         if self._in_txn:
  if (unlikely(__pyx_v_self->_in_txn)) {
/* … */
  }
+13325:             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(0, 13325, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+13326:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13326, __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(0, 13326, __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_Cannot_flush_explicitly_inside_a};
      __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(0, 13325, __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(0, 13325, __pyx_L1_error)
 13327:                 'Cannot flush explicitly inside a transaction')
+13328:         self._check_qwp_ws('flush_and_get_fsn')
  __pyx_t_8 = __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush_and_get_fsn); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13328, __pyx_L1_error)
+13329:         if buffer is not None:
  __pyx_t_9 = (((PyObject *)__pyx_v_buffer) != Py_None);
  if (__pyx_t_9) {
/* … */
    goto __pyx_L4;
  }
+13330:             buffer._check_impl()
    __pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__check_impl(__pyx_v_buffer); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13330, __pyx_L1_error)
+13331:             self._check_buffer_protocol(buffer)
    __pyx_t_8 = __pyx_f_7questdb_7_client_6Sender__check_buffer_protocol(__pyx_v_self, __pyx_v_buffer); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13331, __pyx_L1_error)
+13332:             c_buf = buffer._impl
    __pyx_t_10 = __pyx_v_buffer->_impl;
    __pyx_v_c_buf = __pyx_t_10;
 13333:         else:
+13334:             buffer = self._buffer
  /*else*/ {
    __pyx_t_2 = ((PyObject *)__pyx_v_self->_buffer);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_DECREF_SET(__pyx_v_buffer, ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_2));
    __pyx_t_2 = 0;
+13335:             c_buf = self._buffer._impl
    __pyx_t_10 = __pyx_v_self->_buffer->_impl;
    __pyx_v_c_buf = __pyx_t_10;
  }
  __pyx_L4:;
+13336:         (buffer if buffer is not None else self._buffer)._check_not_in_row(
  __pyx_t_9 = (((PyObject *)__pyx_v_buffer) != Py_None);
  if (__pyx_t_9) {
    __Pyx_INCREF((PyObject *)__pyx_v_buffer);
    __pyx_t_2 = ((PyObject *)__pyx_v_buffer);
  } else {
    __Pyx_INCREF((PyObject *)__pyx_v_self->_buffer);
    __pyx_t_2 = ((PyObject *)__pyx_v_self->_buffer);
  }
  __pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_2), __pyx_mstate_global->__pyx_n_u_flush_and_get_fsn, NULL); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13336, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 13337:             'flush_and_get_fsn')
 13338: 
+13339:         cdef bint outer_in_flight = self._enter_native()
  __pyx_v_outer_in_flight = __pyx_f_7questdb_7_client_6Sender__enter_native(__pyx_v_self);
+13340:         buffer._begin_native_borrow(True)
  __pyx_f_7questdb_7_client_6Buffer__begin_native_borrow(__pyx_v_buffer, 1);
+13341:         _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+13342:         ok = line_sender_qwpws_flush_and_get_fsn(sender, c_buf, &fsn, &err)
  __pyx_v_ok = line_sender_qwpws_flush_and_get_fsn(__pyx_v_sender, __pyx_v_c_buf, (&__pyx_v_fsn), (&__pyx_v_err));
+13343:         _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+13344:         buffer._end_native_borrow(True)
  __pyx_f_7questdb_7_client_6Buffer__end_native_borrow(__pyx_v_buffer, 1);
+13345:         self._exit_native(outer_in_flight)
  __pyx_f_7questdb_7_client_6Sender__exit_native(__pyx_v_self, __pyx_v_outer_in_flight);
+13346:         if not ok:
  __pyx_t_9 = (!__pyx_v_ok);
  if (__pyx_t_9) {
/* … */
  }
+13347:             if c_buf == self._buffer._impl:
    __pyx_t_9 = (__pyx_v_c_buf == __pyx_v_self->_buffer->_impl);
    if (__pyx_t_9) {
/* … */
    }
+13348:                 line_sender_buffer_clear(c_buf)
      line_sender_buffer_clear(__pyx_v_c_buf);
+13349:             raise c_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13349, __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(0, 13349, __pyx_L1_error)
+13350:         if c_buf == self._buffer._impl:
  __pyx_t_9 = (__pyx_v_c_buf == __pyx_v_self->_buffer->_impl);
  if (__pyx_t_9) {
/* … */
  }
+13351:             self._last_flush_ms[0] = line_sender_now_micros() // 1000
    (__pyx_v_self->_last_flush_ms[0]) = __Pyx_div_int64_t(line_sender_now_micros(), 0x3E8, 1);
+13352:         _oidc_raise_unscheduled_main()
  __pyx_t_8 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13352, __pyx_L1_error)
+13353:         if fsn.has_value:
  __pyx_t_9 = (__pyx_v_fsn.has_value != 0);
  if (__pyx_t_9) {
/* … */
  }
+13354:             return fsn.value
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13354, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+13355:         return None
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
 13356: 
+13357:     def flush_and_keep_and_get_fsn(self, Buffer buffer=None):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_33flush_and_keep_and_get_fsn(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_32flush_and_keep_and_get_fsn, "\n        Publish a QWP/WebSocket buffer locally without clearing it and return\n        the assigned frame sequence number.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_33flush_and_keep_and_get_fsn = {"flush_and_keep_and_get_fsn", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_33flush_and_keep_and_get_fsn, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_32flush_and_keep_and_get_fsn};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_33flush_and_keep_and_get_fsn(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
) {
  struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer = 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("flush_and_keep_and_get_fsn (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_buffer,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(0, 13357, __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(0, 13357, __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, "flush_and_keep_and_get_fsn", 0) < (0)) __PYX_ERR(0, 13357, __pyx_L3_error)
      if (!values[0]) values[0] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None));
    } else {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13357, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[0]) values[0] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None));
    }
    __pyx_v_buffer = ((struct __pyx_obj_7questdb_7_client_Buffer *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("flush_and_keep_and_get_fsn", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 13357, __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.Sender.flush_and_keep_and_get_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_buffer), __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Buffer, 1, "buffer", 0))) __PYX_ERR(0, 13357, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_32flush_and_keep_and_get_fsn(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), __pyx_v_buffer);

  /* 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_6Sender_32flush_and_keep_and_get_fsn(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer) {
  struct line_sender *__pyx_v_sender;
  struct line_sender_error *__pyx_v_err;
  struct line_sender_buffer *__pyx_v_c_buf;
  struct line_sender_qwpws_fsn __pyx_v_fsn;
  PyThreadState *__pyx_v_gs;
  int __pyx_v_ok;
  int __pyx_v_outer_in_flight;
  PyObject *__pyx_r = NULL;
  __Pyx_INCREF((PyObject *)__pyx_v_buffer);
/* … */
  /* 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.Sender.flush_and_keep_and_get_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_buffer);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_33flush_and_keep_and_get_fsn, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_flush_and_keep_and_get_fs, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[235])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 13357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_17, __pyx_mstate_global->__pyx_tuple[24]);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_flush_and_keep_and_get_fsn, __pyx_t_17) < (0)) __PYX_ERR(0, 13357, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 13358:         """
 13359:         Publish a QWP/WebSocket buffer locally without clearing it and return
 13360:         the assigned frame sequence number.
 13361:         """
+13362:         cdef line_sender* sender = self._impl
  __pyx_t_1 = __pyx_v_self->_impl;
  __pyx_v_sender = __pyx_t_1;
+13363:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+13364:         cdef line_sender_buffer* c_buf = NULL
  __pyx_v_c_buf = NULL;
 13365:         cdef line_sender_qwpws_fsn fsn
+13366:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+13367:         cdef bint ok = False
  __pyx_v_ok = 0;
 13368: 
+13369:         if self._in_txn:
  if (unlikely(__pyx_v_self->_in_txn)) {
/* … */
  }
+13370:             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(0, 13370, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+13371:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13371, __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(0, 13371, __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_Cannot_flush_explicitly_inside_a};
      __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(0, 13370, __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(0, 13370, __pyx_L1_error)
 13372:                 'Cannot flush explicitly inside a transaction')
+13373:         self._check_qwp_ws('flush_and_keep_and_get_fsn')
  __pyx_t_8 = __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush_and_keep_and_get_fsn); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13373, __pyx_L1_error)
+13374:         if buffer is not None:
  __pyx_t_9 = (((PyObject *)__pyx_v_buffer) != Py_None);
  if (__pyx_t_9) {
/* … */
    goto __pyx_L4;
  }
 13375:             # Native borrows the buffer read-only (`const`), as
 13376:             # `flush(buffer, clear=False)` does.
+13377:             buffer._check_readable()
    __pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__check_readable(__pyx_v_buffer); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13377, __pyx_L1_error)
+13378:             self._check_buffer_protocol(buffer)
    __pyx_t_8 = __pyx_f_7questdb_7_client_6Sender__check_buffer_protocol(__pyx_v_self, __pyx_v_buffer); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13378, __pyx_L1_error)
+13379:             c_buf = buffer._impl
    __pyx_t_10 = __pyx_v_buffer->_impl;
    __pyx_v_c_buf = __pyx_t_10;
 13380:         else:
+13381:             buffer = self._buffer
  /*else*/ {
    __pyx_t_2 = ((PyObject *)__pyx_v_self->_buffer);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_DECREF_SET(__pyx_v_buffer, ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_2));
    __pyx_t_2 = 0;
+13382:             c_buf = self._buffer._impl
    __pyx_t_10 = __pyx_v_self->_buffer->_impl;
    __pyx_v_c_buf = __pyx_t_10;
  }
  __pyx_L4:;
+13383:         (buffer if buffer is not None else self._buffer)._check_not_in_row(
  __pyx_t_9 = (((PyObject *)__pyx_v_buffer) != Py_None);
  if (__pyx_t_9) {
    __Pyx_INCREF((PyObject *)__pyx_v_buffer);
    __pyx_t_2 = ((PyObject *)__pyx_v_buffer);
  } else {
    __Pyx_INCREF((PyObject *)__pyx_v_self->_buffer);
    __pyx_t_2 = ((PyObject *)__pyx_v_self->_buffer);
  }
  __pyx_t_8 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_2), __pyx_mstate_global->__pyx_n_u_flush_and_keep_and_get_fsn, NULL); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13383, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 13384:             'flush_and_keep_and_get_fsn')
 13385: 
+13386:         cdef bint outer_in_flight = self._enter_native()
  __pyx_v_outer_in_flight = __pyx_f_7questdb_7_client_6Sender__enter_native(__pyx_v_self);
+13387:         buffer._begin_native_borrow(False)
  __pyx_f_7questdb_7_client_6Buffer__begin_native_borrow(__pyx_v_buffer, 0);
+13388:         _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+13389:         ok = line_sender_qwpws_flush_and_keep_and_get_fsn(
  __pyx_v_ok = line_sender_qwpws_flush_and_keep_and_get_fsn(__pyx_v_sender, __pyx_v_c_buf, (&__pyx_v_fsn), (&__pyx_v_err));
 13390:             sender, c_buf, &fsn, &err)
+13391:         _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+13392:         buffer._end_native_borrow(False)
  __pyx_f_7questdb_7_client_6Buffer__end_native_borrow(__pyx_v_buffer, 0);
+13393:         self._exit_native(outer_in_flight)
  __pyx_f_7questdb_7_client_6Sender__exit_native(__pyx_v_self, __pyx_v_outer_in_flight);
+13394:         if not ok:
  __pyx_t_9 = (!__pyx_v_ok);
  if (__pyx_t_9) {
/* … */
  }
+13395:             if c_buf == self._buffer._impl:
    __pyx_t_9 = (__pyx_v_c_buf == __pyx_v_self->_buffer->_impl);
    if (__pyx_t_9) {
/* … */
    }
+13396:                 line_sender_buffer_clear(c_buf)
      line_sender_buffer_clear(__pyx_v_c_buf);
+13397:             raise c_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13397, __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(0, 13397, __pyx_L1_error)
+13398:         if c_buf == self._buffer._impl:
  __pyx_t_9 = (__pyx_v_c_buf == __pyx_v_self->_buffer->_impl);
  if (__pyx_t_9) {
/* … */
  }
+13399:             self._last_flush_ms[0] = line_sender_now_micros() // 1000
    (__pyx_v_self->_last_flush_ms[0]) = __Pyx_div_int64_t(line_sender_now_micros(), 0x3E8, 1);
+13400:         _oidc_raise_unscheduled_main()
  __pyx_t_8 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13400, __pyx_L1_error)
+13401:         if fsn.has_value:
  __pyx_t_9 = (__pyx_v_fsn.has_value != 0);
  if (__pyx_t_9) {
/* … */
  }
+13402:             return fsn.value
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13402, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+13403:         return None
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
 13404: 
+13405:     def published_fsn(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_35published_fsn(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_34published_fsn, "\n        Highest QWP/WebSocket frame sequence number published locally.\n\n        Raises :class:`QuestDBError <questdb.QuestDBError>`\n        (``InvalidApiCall``) when called from this sender's own\n        ``error_handler`` or ``connection_listener``, or from any thread\n        while this sender is inside a native call such as\n        :func:`Sender.flush`.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_35published_fsn = {"published_fsn", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_35published_fsn, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_34published_fsn};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_35published_fsn(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
) {
  #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("published_fsn (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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("published_fsn", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("published_fsn", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_34published_fsn(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_6Sender_34published_fsn(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
  struct line_sender_qwpws_fsn __pyx_v_fsn;
  struct line_sender_error *__pyx_v_err;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client.Sender.published_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_35published_fsn, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_published_fsn, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[236])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 13405, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_published_fsn, __pyx_t_17) < (0)) __PYX_ERR(0, 13405, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 13406:         """
 13407:         Highest QWP/WebSocket frame sequence number published locally.
 13408: 
 13409:         Raises :class:`QuestDBError <questdb.QuestDBError>`
 13410:         (``InvalidApiCall``) when called from this sender's own
 13411:         ``error_handler`` or ``connection_listener``, or from any thread
 13412:         while this sender is inside a native call such as
 13413:         :func:`Sender.flush`.
 13414:         """
 13415:         cdef line_sender_qwpws_fsn fsn
+13416:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 13417: 
+13418:         self._check_qwp_ws('published_fsn')
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_published_fsn); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13418, __pyx_L1_error)
+13419:         if not line_sender_qwpws_published_fsn(self._impl, &fsn, &err):
  __pyx_t_2 = (!line_sender_qwpws_published_fsn(__pyx_v_self->_impl, (&__pyx_v_fsn), (&__pyx_v_err)));
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+13420:             raise c_err_to_py(err)
    __pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13420, __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(0, 13420, __pyx_L1_error)
+13421:         if fsn.has_value:
  __pyx_t_2 = (__pyx_v_fsn.has_value != 0);
  if (__pyx_t_2) {
/* … */
  }
+13422:             return fsn.value
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13422, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
+13423:         return None
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
 13424: 
+13425:     def acked_fsn(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_37acked_fsn(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_36acked_fsn, "\n        Highest QWP/WebSocket frame sequence number completed by ACK or\n        drop-and-continue rejection.\n\n        Raises :class:`QuestDBError <questdb.QuestDBError>`\n        (``InvalidApiCall``) when called from this sender's own\n        ``error_handler`` or ``connection_listener``, or from any thread\n        while this sender is inside a native call such as\n        :func:`Sender.flush`.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_37acked_fsn = {"acked_fsn", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_37acked_fsn, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_36acked_fsn};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_37acked_fsn(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
) {
  #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("acked_fsn (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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("acked_fsn", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("acked_fsn", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_36acked_fsn(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_6Sender_36acked_fsn(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
  struct line_sender_qwpws_fsn __pyx_v_fsn;
  struct line_sender_error *__pyx_v_err;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client.Sender.acked_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_37acked_fsn, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_acked_fsn, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[237])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 13425, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_acked_fsn, __pyx_t_17) < (0)) __PYX_ERR(0, 13425, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 13426:         """
 13427:         Highest QWP/WebSocket frame sequence number completed by ACK or
 13428:         drop-and-continue rejection.
 13429: 
 13430:         Raises :class:`QuestDBError <questdb.QuestDBError>`
 13431:         (``InvalidApiCall``) when called from this sender's own
 13432:         ``error_handler`` or ``connection_listener``, or from any thread
 13433:         while this sender is inside a native call such as
 13434:         :func:`Sender.flush`.
 13435:         """
 13436:         cdef line_sender_qwpws_fsn fsn
+13437:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 13438: 
+13439:         self._check_qwp_ws('acked_fsn')
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_acked_fsn); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13439, __pyx_L1_error)
+13440:         if not line_sender_qwpws_acked_fsn(self._impl, &fsn, &err):
  __pyx_t_2 = (!line_sender_qwpws_acked_fsn(__pyx_v_self->_impl, (&__pyx_v_fsn), (&__pyx_v_err)));
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+13441:             raise c_err_to_py(err)
    __pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13441, __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(0, 13441, __pyx_L1_error)
+13442:         if fsn.has_value:
  __pyx_t_2 = (__pyx_v_fsn.has_value != 0);
  if (__pyx_t_2) {
/* … */
  }
+13443:             return fsn.value
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13443, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
+13444:         return None
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
 13445: 
+13446:     def await_acked_fsn(self, fsn, timeout_millis=0):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_39await_acked_fsn(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_38await_acked_fsn, "\n        Wait until the QWP/WebSocket completion watermark reaches ``fsn``.\n\n        Returns ``True`` once every frame published so far (which includes\n        ``fsn``) has been acknowledged, or ``False`` if the no-progress\n        timeout elapsed before the acknowledgement watermark reached ``fsn``.\n\n        ``timeout_millis`` is a no-progress timeout; ``0`` waits indefinitely,\n        including while an attached OIDC provider has no usable token and the\n        background reconnect keeps retrying.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_39await_acked_fsn = {"await_acked_fsn", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_39await_acked_fsn, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_38await_acked_fsn};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_39await_acked_fsn(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_fsn = 0;
  PyObject *__pyx_v_timeout_millis = 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("await_acked_fsn (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_fsn,&__pyx_mstate_global->__pyx_n_u_timeout_millis,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(0, 13446, __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(0, 13446, __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(0, 13446, __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, "await_acked_fsn", 0) < (0)) __PYX_ERR(0, 13446, __pyx_L3_error)
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("await_acked_fsn", 0, 1, 2, i); __PYX_ERR(0, 13446, __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(0, 13446, __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(0, 13446, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
    }
    __pyx_v_fsn = values[0];
    __pyx_v_timeout_millis = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("await_acked_fsn", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 13446, __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.Sender.await_acked_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_38await_acked_fsn(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), __pyx_v_fsn, __pyx_v_timeout_millis);
  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_6Sender_38await_acked_fsn(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, PyObject *__pyx_v_fsn, PyObject *__pyx_v_timeout_millis) {
  struct line_sender_error *__pyx_v_err;
  PyThreadState *__pyx_v_gs;
  uint64_t __pyx_v_c_fsn;
  uint64_t __pyx_v_c_timeout_millis;
  struct line_sender_qwpws_fsn __pyx_v_acked;
  int __pyx_v_ok;
  int __pyx_v_outer_in_flight;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("questdb._client.Sender.await_acked_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_39await_acked_fsn, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_await_acked_fsn, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[238])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 13446, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_17, __pyx_mstate_global->__pyx_tuple[5]);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_await_acked_fsn, __pyx_t_17) < (0)) __PYX_ERR(0, 13446, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 13447:         """
 13448:         Wait until the QWP/WebSocket completion watermark reaches ``fsn``.
 13449: 
 13450:         Returns ``True`` once every frame published so far (which includes
 13451:         ``fsn``) has been acknowledged, or ``False`` if the no-progress
 13452:         timeout elapsed before the acknowledgement watermark reached ``fsn``.
 13453: 
 13454:         ``timeout_millis`` is a no-progress timeout; ``0`` waits indefinitely,
 13455:         including while an attached OIDC provider has no usable token and the
 13456:         background reconnect keeps retrying.
 13457:         """
+13458:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+13459:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
 13460:         cdef uint64_t c_fsn
 13461:         cdef uint64_t c_timeout_millis
 13462:         cdef line_sender_qwpws_fsn acked
+13463:         cdef bint ok = False
  __pyx_v_ok = 0;
 13464: 
+13465:         self._check_qwp_ws('await_acked_fsn')
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_await_acked_fsn); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13465, __pyx_L1_error)
+13466:         if not isinstance(fsn, int) or isinstance(fsn, bool):
  __pyx_t_3 = PyLong_Check(__pyx_v_fsn); 
  __pyx_t_4 = (!__pyx_t_3);
  if (!__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = __Pyx_TypeCheck(__pyx_v_fsn, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); 
  __pyx_t_2 = __pyx_t_4;
  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+13467:             raise TypeError('"fsn" must be a non-negative int.')
    __pyx_t_6 = NULL;
    __pyx_t_7 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_fsn_must_be_a_non_negative_int};
      __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __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;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13467, __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(0, 13467, __pyx_L1_error)
+13468:         if fsn < 0:
  __pyx_t_5 = PyObject_RichCompare(__pyx_v_fsn, __pyx_mstate_global->__pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13468, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 13468, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+13469:             raise ValueError('"fsn" must be a non-negative int.')
    __pyx_t_6 = NULL;
    __pyx_t_7 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_fsn_must_be_a_non_negative_int};
      __pyx_t_5 = __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;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13469, __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(0, 13469, __pyx_L1_error)
+13470:         if not isinstance(timeout_millis, int) or isinstance(timeout_millis, bool):
  __pyx_t_4 = PyLong_Check(__pyx_v_timeout_millis); 
  __pyx_t_3 = (!__pyx_t_4);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L8_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_timeout_millis, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); 
  __pyx_t_2 = __pyx_t_3;
  __pyx_L8_bool_binop_done:;
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+13471:             raise TypeError('"timeout_millis" must be a non-negative int.')
    __pyx_t_6 = NULL;
    __pyx_t_7 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_timeout_millis_must_be_a_non_ne};
      __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __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;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13471, __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(0, 13471, __pyx_L1_error)
+13472:         if timeout_millis < 0:
  __pyx_t_5 = PyObject_RichCompare(__pyx_v_timeout_millis, __pyx_mstate_global->__pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13472, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 13472, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+13473:             raise ValueError('"timeout_millis" must be a non-negative int.')
    __pyx_t_6 = NULL;
    __pyx_t_7 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_timeout_millis_must_be_a_non_ne};
      __pyx_t_5 = __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;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13473, __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(0, 13473, __pyx_L1_error)
+13474:         c_fsn = fsn
  __pyx_t_8 = __Pyx_PyLong_As_uint64_t(__pyx_v_fsn); if (unlikely((__pyx_t_8 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 13474, __pyx_L1_error)
  __pyx_v_c_fsn = __pyx_t_8;
+13475:         c_timeout_millis = timeout_millis
  __pyx_t_8 = __Pyx_PyLong_As_uint64_t(__pyx_v_timeout_millis); if (unlikely((__pyx_t_8 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 13475, __pyx_L1_error)
  __pyx_v_c_timeout_millis = __pyx_t_8;
 13476: 
 13477:         # Fast path: the completion watermark may already cover ``fsn``.
+13478:         if not line_sender_qwpws_acked_fsn(self._impl, &acked, &err):
  __pyx_t_2 = (!line_sender_qwpws_acked_fsn(__pyx_v_self->_impl, (&__pyx_v_acked), (&__pyx_v_err)));
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+13479:             raise c_err_to_py(err)
    __pyx_t_5 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13479, __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(0, 13479, __pyx_L1_error)
+13480:         if acked.has_value and acked.value >= c_fsn:
  __pyx_t_3 = (__pyx_v_acked.has_value != 0);
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L13_bool_binop_done;
  }
  __pyx_t_3 = (__pyx_v_acked.value >= __pyx_v_c_fsn);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L13_bool_binop_done:;
  if (__pyx_t_2) {
/* … */
  }
+13481:             return True
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(Py_True);
    __pyx_r = Py_True;
    goto __pyx_L0;
 13482: 
 13483:         # `line_sender_qwpws_wait` drains every frame published so far (a
 13484:         # superset of ``fsn``) up to the "ok" ack level. The no-progress
 13485:         # deadline (`timeout_millis`; 0 == wait indefinitely) surfaces as a
 13486:         # `line_sender_error_failover_retry`, which we translate back into the
 13487:         # historical ``reached == False`` return rather than raising.
+13488:         cdef bint outer_in_flight = self._enter_native()
  __pyx_v_outer_in_flight = __pyx_f_7questdb_7_client_6Sender__enter_native(__pyx_v_self);
+13489:         _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+13490:         ok = line_sender_qwpws_wait(
  __pyx_v_ok = line_sender_qwpws_wait(__pyx_v_self->_impl, qwpws_ack_level_ok, __pyx_v_c_timeout_millis, (&__pyx_v_err));
 13491:             self._impl,
 13492:             qwpws_ack_level.qwpws_ack_level_ok,
 13493:             c_timeout_millis,
 13494:             &err)
+13495:         _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+13496:         self._exit_native(outer_in_flight)
  __pyx_f_7questdb_7_client_6Sender__exit_native(__pyx_v_self, __pyx_v_outer_in_flight);
+13497:         if not ok:
  __pyx_t_2 = (!__pyx_v_ok);
  if (__pyx_t_2) {
/* … */
  }
+13498:             if line_sender_error_get_code(err) != \
    __pyx_t_2 = (line_sender_error_get_code(__pyx_v_err) != line_sender_error_failover_retry);
    if (unlikely(__pyx_t_2)) {
/* … */
    }
 13499:                     line_sender_error_failover_retry:
+13500:                 raise c_err_to_py(err)
      __pyx_t_5 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13500, __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(0, 13500, __pyx_L1_error)
+13501:             line_sender_error_free(err)
    line_sender_error_free(__pyx_v_err);
+13502:             err = NULL
    __pyx_v_err = NULL;
 13503: 
 13504:         # Re-read the watermark: the wait either drained ``fsn`` or expired
 13505:         # with no progress; the current ack level is the answer.
+13506:         if not line_sender_qwpws_acked_fsn(self._impl, &acked, &err):
  __pyx_t_2 = (!line_sender_qwpws_acked_fsn(__pyx_v_self->_impl, (&__pyx_v_acked), (&__pyx_v_err)));
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+13507:             raise c_err_to_py(err)
    __pyx_t_5 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13507, __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(0, 13507, __pyx_L1_error)
+13508:         _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(0, 13508, __pyx_L1_error)
+13509:         return bool(acked.has_value and acked.value >= c_fsn)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_6 = NULL;
  if (__pyx_v_acked.has_value) {
  } else {
    __pyx_t_10 = __Pyx_PyLong_From_bool(__pyx_v_acked.has_value); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 13509, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_9 = __pyx_t_10;
    __pyx_t_10 = 0;
    goto __pyx_L18_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_acked.value >= __pyx_v_c_fsn);
  __pyx_t_10 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 13509, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_9 = __pyx_t_10;
  __pyx_t_10 = 0;
  __pyx_L18_bool_binop_done:;
  __pyx_t_7 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_9};
    __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __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_5)) __PYX_ERR(0, 13509, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_5);
  }
  __pyx_r = ((PyObject *)__pyx_t_5);
  __pyx_t_5 = 0;
  goto __pyx_L0;
 13510: 
+13511:     def drive_once(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_41drive_once(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_40drive_once, "\n        Drive one QWP/WebSocket progress step for manual progress senders.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_41drive_once = {"drive_once", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_41drive_once, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_40drive_once};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_41drive_once(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
) {
  #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("drive_once (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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("drive_once", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("drive_once", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_40drive_once(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_6Sender_40drive_once(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
  struct line_sender_error *__pyx_v_err;
  PyThreadState *__pyx_v_gs;
  bool __pyx_v_progressed;
  int __pyx_v_ok;
  int __pyx_v_outer_in_flight;
  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_AddTraceback("questdb._client.Sender.drive_once", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_41drive_once, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_drive_once, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[239])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 13511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_drive_once, __pyx_t_17) < (0)) __PYX_ERR(0, 13511, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 13512:         """
 13513:         Drive one QWP/WebSocket progress step for manual progress senders.
 13514:         """
+13515:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+13516:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+13517:         cdef cbool progressed = False
  __pyx_v_progressed = 0;
+13518:         cdef bint ok = False
  __pyx_v_ok = 0;
 13519: 
+13520:         self._check_qwp_ws('drive_once')
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_drive_once); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13520, __pyx_L1_error)
+13521:         cdef bint outer_in_flight = self._enter_native()
  __pyx_v_outer_in_flight = __pyx_f_7questdb_7_client_6Sender__enter_native(__pyx_v_self);
+13522:         _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+13523:         ok = line_sender_qwpws_drive_once(self._impl, &progressed, &err)
  __pyx_v_ok = line_sender_qwpws_drive_once(__pyx_v_self->_impl, (&__pyx_v_progressed), (&__pyx_v_err));
+13524:         _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+13525:         self._exit_native(outer_in_flight)
  __pyx_f_7questdb_7_client_6Sender__exit_native(__pyx_v_self, __pyx_v_outer_in_flight);
+13526:         if not ok:
  __pyx_t_2 = (!__pyx_v_ok);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+13527:             raise c_err_to_py(err)
    __pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13527, __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(0, 13527, __pyx_L1_error)
+13528:         _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(0, 13528, __pyx_L1_error)
+13529:         return bool(progressed)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = NULL;
  __pyx_t_5 = __Pyx_PyLong_From_bool(__pyx_v_progressed); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13529, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_5};
    __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __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(0, 13529, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_3);
  }
  __pyx_r = ((PyObject *)__pyx_t_3);
  __pyx_t_3 = 0;
  goto __pyx_L0;
 13530: 
+13531:     def poll_error(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_43poll_error(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_42poll_error, "\n        Poll the next structured QWP/WebSocket diagnostic.\n\n        Raises :class:`QuestDBError <questdb.QuestDBError>`\n        (``InvalidApiCall``) when called from this sender's own\n        ``error_handler`` or ``connection_listener``, or from any thread\n        while this sender is inside a native call such as\n        :func:`Sender.flush`.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_43poll_error = {"poll_error", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_43poll_error, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_42poll_error};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_43poll_error(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
) {
  #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("poll_error (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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("poll_error", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("poll_error", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_42poll_error(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_6Sender_42poll_error(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_qwpws_error *__pyx_v_qwp_err;
  struct line_sender_qwpws_error_view __pyx_v_view;
  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_AddTraceback("questdb._client.Sender.poll_error", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_43poll_error, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_poll_error, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[240])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 13531, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_poll_error, __pyx_t_17) < (0)) __PYX_ERR(0, 13531, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 13532:         """
 13533:         Poll the next structured QWP/WebSocket diagnostic.
 13534: 
 13535:         Raises :class:`QuestDBError <questdb.QuestDBError>`
 13536:         (``InvalidApiCall``) when called from this sender's own
 13537:         ``error_handler`` or ``connection_listener``, or from any thread
 13538:         while this sender is inside a native call such as
 13539:         :func:`Sender.flush`.
 13540:         """
+13541:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+13542:         cdef line_sender_qwpws_error* qwp_err = NULL
  __pyx_v_qwp_err = NULL;
 13543:         cdef line_sender_qwpws_error_view view
 13544: 
+13545:         self._check_qwp_ws('poll_error')
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_poll_error); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13545, __pyx_L1_error)
+13546:         if not line_sender_qwpws_poll_error(self._impl, &qwp_err, &err):
  __pyx_t_2 = (!line_sender_qwpws_poll_error(__pyx_v_self->_impl, (&__pyx_v_qwp_err), (&__pyx_v_err)));
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+13547:             raise c_err_to_py(err)
    __pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13547, __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(0, 13547, __pyx_L1_error)
+13548:         if qwp_err == NULL:
  __pyx_t_2 = (__pyx_v_qwp_err == NULL);
  if (__pyx_t_2) {
/* … */
  }
+13549:             return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+13550:         try:
  /*try:*/ {
+13551:             view = line_sender_qwpws_error_get_view(qwp_err)
    __pyx_v_view = line_sender_qwpws_error_get_view(__pyx_v_qwp_err);
+13552:             return _sender_error_from_raw(c_sender_error_view_to_raw(view))
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_4 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_sender_error_from_raw); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13552, __pyx_L6_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __pyx_f_7questdb_7_client_c_sender_error_view_to_raw(__pyx_v_view); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13552, __pyx_L6_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = 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_7 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_6};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __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;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13552, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L5_return;
  }
 13553:         finally:
+13554:             line_sender_qwpws_error_free(qwp_err)
  /*finally:*/ {
    __pyx_L6_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __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_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
      if ( unlikely(__Pyx_GetException(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13) < 0)) __Pyx_ErrFetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_14);
      __Pyx_XGOTREF(__pyx_t_15);
      __Pyx_XGOTREF(__pyx_t_16);
      __pyx_t_8 = __pyx_lineno; __pyx_t_9 = __pyx_clineno; __pyx_t_10 = __pyx_filename;
      {
        line_sender_qwpws_error_free(__pyx_v_qwp_err);
      }
      __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_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ErrRestore(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
      __pyx_lineno = __pyx_t_8; __pyx_clineno = __pyx_t_9; __pyx_filename = __pyx_t_10;
      goto __pyx_L1_error;
    }
    __pyx_L5_return: {
      __pyx_t_16 = __pyx_r;
      __pyx_r = 0;
      line_sender_qwpws_error_free(__pyx_v_qwp_err);
      __pyx_r = __pyx_t_16;
      __pyx_t_16 = 0;
      goto __pyx_L0;
    }
  }
 13555: 
+13556:     def error_events_dropped(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_45error_events_dropped(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_44error_events_dropped, "\n        Number of QWP/WebSocket diagnostics dropped from the bounded ring.\n\n        Raises :class:`QuestDBError <questdb.QuestDBError>`\n        (``InvalidApiCall``) when called from this sender's own\n        ``error_handler`` or ``connection_listener``, or from any thread\n        while this sender is inside a native call such as\n        :func:`Sender.flush`.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_45error_events_dropped = {"error_events_dropped", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_45error_events_dropped, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_44error_events_dropped};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_45error_events_dropped(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
) {
  #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("error_events_dropped (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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("error_events_dropped", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("error_events_dropped", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_44error_events_dropped(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_6Sender_44error_events_dropped(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
  struct line_sender_error *__pyx_v_err;
  uint64_t __pyx_v_dropped;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client.Sender.error_events_dropped", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_45error_events_dropped, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_error_events_dropped, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[241])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 13556, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_error_events_dropped, __pyx_t_17) < (0)) __PYX_ERR(0, 13556, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 13557:         """
 13558:         Number of QWP/WebSocket diagnostics dropped from the bounded ring.
 13559: 
 13560:         Raises :class:`QuestDBError <questdb.QuestDBError>`
 13561:         (``InvalidApiCall``) when called from this sender's own
 13562:         ``error_handler`` or ``connection_listener``, or from any thread
 13563:         while this sender is inside a native call such as
 13564:         :func:`Sender.flush`.
 13565:         """
+13566:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+13567:         cdef uint64_t dropped = 0
  __pyx_v_dropped = 0;
 13568: 
+13569:         self._check_qwp_ws('error_events_dropped')
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_error_events_dropped); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13569, __pyx_L1_error)
+13570:         if not line_sender_qwpws_errors_dropped(self._impl, &dropped, &err):
  __pyx_t_2 = (!line_sender_qwpws_errors_dropped(__pyx_v_self->_impl, (&__pyx_v_dropped), (&__pyx_v_err)));
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+13571:             raise c_err_to_py(err)
    __pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13571, __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(0, 13571, __pyx_L1_error)
+13572:         return dropped
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_v_dropped); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13572, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 13573: 
+13574:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_25connection_events_dropped_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Sender_25connection_events_dropped_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_25connection_events_dropped___get__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_6Sender_25connection_events_dropped___get__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client.Sender.connection_events_dropped.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 13575:     def connection_events_dropped(self) -> int:
 13576:         """
 13577:         Total connection events discarded by the listener inbox's
 13578:         drop-oldest policy. ``0`` when no listener is registered.
 13579: 
 13580:         Raises :class:`QuestDBError <questdb.QuestDBError>`
 13581:         (``InvalidApiCall``) when read from any thread while this sender is
 13582:         inside a native call such as :func:`Sender.flush`.
 13583:         """
+13584:         self._check_not_in_own_callback(
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.allow_idle_callback = 1;
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_connection_events_dropped, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13584, __pyx_L1_error)
 13585:             'connection_events_dropped', allow_idle_callback=True)
+13586:         if self._impl == NULL:
  __pyx_t_3 = (__pyx_v_self->_impl == NULL);
  if (__pyx_t_3) {
/* … */
  }
+13587:             return 0
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
    __pyx_r = __pyx_mstate_global->__pyx_int_0;
    goto __pyx_L0;
+13588:         return line_sender_connection_events_dropped(self._impl)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = __Pyx_PyLong_From_uint64_t(line_sender_connection_events_dropped(__pyx_v_self->_impl)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13588, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
 13589: 
+13590:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_27connection_events_delivered_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_6Sender_27connection_events_delivered_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_27connection_events_delivered___get__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_6Sender_27connection_events_delivered___get__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client.Sender.connection_events_delivered.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 13591:     def connection_events_delivered(self) -> int:
 13592:         """
 13593:         Total connection events delivered to the listener. ``0`` when no
 13594:         listener is registered.
 13595: 
 13596:         Raises :class:`QuestDBError <questdb.QuestDBError>`
 13597:         (``InvalidApiCall``) when read from any thread while this sender is
 13598:         inside a native call such as :func:`Sender.flush`.
 13599:         """
+13600:         self._check_not_in_own_callback(
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.allow_idle_callback = 1;
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_connection_events_delivered, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13600, __pyx_L1_error)
 13601:             'connection_events_delivered', allow_idle_callback=True)
+13602:         if self._impl == NULL:
  __pyx_t_3 = (__pyx_v_self->_impl == NULL);
  if (__pyx_t_3) {
/* … */
  }
+13603:             return 0
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
    __pyx_r = __pyx_mstate_global->__pyx_int_0;
    goto __pyx_L0;
+13604:         return line_sender_connection_events_delivered(self._impl)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = __Pyx_PyLong_From_uint64_t(line_sender_connection_events_delivered(__pyx_v_self->_impl)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13604, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
 13605: 
+13606:     def close_drain(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_47close_drain(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_46close_drain, "\n        Stop accepting new QWP/WebSocket publications and wait for already\n        published frames to resolve.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_47close_drain = {"close_drain", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_47close_drain, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_46close_drain};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_47close_drain(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
) {
  #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_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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("close_drain", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("close_drain", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_46close_drain(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_6Sender_46close_drain(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
  struct line_sender_error *__pyx_v_err;
  PyThreadState *__pyx_v_gs;
  int __pyx_v_ok;
  int __pyx_v_outer_in_flight;
  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_3);
  __Pyx_AddTraceback("questdb._client.Sender.close_drain", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_47close_drain, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_close_drain, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[242])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 13606, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_close_drain, __pyx_t_17) < (0)) __PYX_ERR(0, 13606, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 13607:         """
 13608:         Stop accepting new QWP/WebSocket publications and wait for already
 13609:         published frames to resolve.
 13610:         """
+13611:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+13612:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+13613:         cdef bint ok = False
  __pyx_v_ok = 0;
 13614: 
+13615:         self._check_qwp_ws('close_drain')
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Sender__check_qwp_ws(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_close_drain); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13615, __pyx_L1_error)
 13616:         # Draining stops the sender accepting anything further, so a
 13617:         # row still being written can never be finished or sent, and
 13618:         # the complete rows buffered before it go with it -- after
 13619:         # which `close(flush=True)` reports success having sent
 13620:         # nothing. Refused while a row is part-way through, like every
 13621:         # other call that ends the buffer.
+13622:         if self._buffer is not None:
  __pyx_t_2 = (((PyObject *)__pyx_v_self->_buffer) != Py_None);
  if (__pyx_t_2) {
/* … */
  }
+13623:             self._buffer._check_not_in_row('close_drain')
    __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_self->_buffer, __pyx_mstate_global->__pyx_n_u_close_drain, NULL); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13623, __pyx_L1_error)
+13624:         cdef bint outer_in_flight = self._enter_native()
  __pyx_v_outer_in_flight = __pyx_f_7questdb_7_client_6Sender__enter_native(__pyx_v_self);
+13625:         _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+13626:         ok = line_sender_qwpws_close_drain(self._impl, &err)
  __pyx_v_ok = line_sender_qwpws_close_drain(__pyx_v_self->_impl, (&__pyx_v_err));
+13627:         _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+13628:         self._exit_native(outer_in_flight)
  __pyx_f_7questdb_7_client_6Sender__exit_native(__pyx_v_self, __pyx_v_outer_in_flight);
+13629:         if not ok:
  __pyx_t_2 = (!__pyx_v_ok);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+13630:             raise c_err_to_py(err)
    __pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13630, __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(0, 13630, __pyx_L1_error)
+13631:         _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(0, 13631, __pyx_L1_error)
 13632: 
+13633:     cdef _close(self, bint dealloc=False):
static PyObject *__pyx_f_7questdb_7_client_6Sender__close(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, struct __pyx_opt_args_7questdb_7_client_6Sender__close *__pyx_optional_args) {
  int __pyx_v_dealloc = ((int)0);
  PyThreadState *__pyx_v_gs;
  struct line_sender *__pyx_v_impl;
  struct line_sender_opts *__pyx_v_opts;
  struct line_sender_opts *__pyx_v_qwp_ws_opts;
  PyObject *__pyx_r = NULL;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_dealloc = __pyx_optional_args->dealloc;
    }
  }
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb._client.Sender._close", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_7questdb_7_client_6Sender__close {
  int __pyx_n;
  int dealloc;
};
+13634:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+13635:         cdef line_sender* impl = self._impl
  __pyx_t_1 = __pyx_v_self->_impl;
  __pyx_v_impl = __pyx_t_1;
+13636:         cdef line_sender_opts* opts = self._opts
  __pyx_t_2 = __pyx_v_self->_opts;
  __pyx_v_opts = __pyx_t_2;
+13637:         cdef line_sender_opts* qwp_ws_opts = self._qwp_ws_opts
  __pyx_t_2 = __pyx_v_self->_qwp_ws_opts;
  __pyx_v_qwp_ws_opts = __pyx_t_2;
+13638:         self._impl = NULL
  __pyx_v_self->_impl = NULL;
+13639:         self._opts = NULL
  __pyx_v_self->_opts = NULL;
+13640:         self._qwp_ws_opts = NULL
  __pyx_v_self->_qwp_ws_opts = NULL;
+13641:         if impl != NULL or opts != NULL or qwp_ws_opts != NULL:
  __pyx_t_4 = (__pyx_v_impl != NULL);
  if (!__pyx_t_4) {
  } else {
    __pyx_t_3 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = (__pyx_v_opts != NULL);
  if (!__pyx_t_4) {
  } else {
    __pyx_t_3 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = (__pyx_v_qwp_ws_opts != NULL);
  __pyx_t_3 = __pyx_t_4;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_3) {
/* … */
  }
+13642:             _ensure_doesnt_have_gil(&gs)
    (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+13643:             if impl != NULL:
    __pyx_t_3 = (__pyx_v_impl != NULL);
    if (__pyx_t_3) {
/* … */
    }
+13644:                 line_sender_close(impl)
      line_sender_close(__pyx_v_impl);
+13645:             line_sender_opts_free(opts)
    line_sender_opts_free(__pyx_v_opts);
+13646:             line_sender_opts_free(qwp_ws_opts)
    line_sender_opts_free(__pyx_v_qwp_ws_opts);
+13647:             _ensure_has_gil(&gs)
    __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+13648:         _release_callback_refs(self._cb_refs_key)
  __pyx_t_5 = __pyx_f_7questdb_7_client__release_callback_refs(__pyx_v_self->_cb_refs_key); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13648, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+13649:         self._cb_refs_key = 0
  __pyx_v_self->_cb_refs_key = 0;
+13650:         self._buffer = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_buffer);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_buffer);
  __pyx_v_self->_buffer = ((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None);
+13651:         self._dispatch_context = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_dispatch_context);
  __Pyx_DECREF(__pyx_v_self->_dispatch_context);
  __pyx_v_self->_dispatch_context = Py_None;
+13652:         self._error_handler = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_error_handler);
  __Pyx_DECREF(__pyx_v_self->_error_handler);
  __pyx_v_self->_error_handler = Py_None;
+13653:         self._connection_listener = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_connection_listener);
  __Pyx_DECREF(__pyx_v_self->_connection_listener);
  __pyx_v_self->_connection_listener = Py_None;
+13654:         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;
 13655:         # Normal close must release the holder even if the sender stays alive.
 13656:         # During __dealloc__, attribute access would resurrect a dying PyPy
 13657:         # wrapper; Cython releases the slot and the instance dictionary after
 13658:         # we return.
+13659:         if not dealloc:
  __pyx_t_3 = (!__pyx_v_dealloc);
  if (__pyx_t_3) {
/* … */
  }
+13660:             _sender_hold_bearer(self, None)
    __pyx_t_6 = __pyx_f_7questdb_7_client__sender_hold_bearer(__pyx_v_self, Py_None); if (unlikely(__pyx_t_6 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13660, __pyx_L1_error)
+13661:         if self._slot_id != -1:
  __pyx_t_3 = (__pyx_v_self->_slot_id != -1L);
  if (__pyx_t_3) {
/* … */
  }
+13662:             qdb_active_senders_track_closed(<uint32_t>self._slot_id)
    qdb_active_senders_track_closed(((uint32_t)__pyx_v_self->_slot_id));
+13663:             self._slot_id = -1
    __pyx_v_self->_slot_id = -1L;
 13664: 
+13665:     cpdef close(self, bint flush=True):
static PyObject *__pyx_pw_7questdb_7_client_6Sender_49close(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 PyObject *__pyx_f_7questdb_7_client_6Sender_close(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_7questdb_7_client_6Sender_close *__pyx_optional_args) {
  int __pyx_v_flush = ((int)1);
  PyObject *__pyx_r = NULL;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_flush = __pyx_optional_args->flush;
    }
  }
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_close); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13665, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7questdb_7_client_6Sender_49close)) {
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = __Pyx_PyBool_FromLong(__pyx_v_flush); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13665, __pyx_L1_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[2] = {__pyx_t_3, __pyx_t_5};
          __pyx_t_2 = __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_3); __pyx_t_3 = 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(0, 13665, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_r = __pyx_t_2;
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }
/* … */
  /* 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.Sender.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_49close(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_48close, "\n        Disconnect.\n\n        This method is idempotent and can be called repeatedly.\n\n        Once a sender is closed, it can't be re-used.\n\n        :param bool flush: If ``True``, flush the internal buffer before closing.\n            For QWP/WebSocket, this also drains already-published frames before\n            closing.\n\n        Refused while a row is part-way through the sender's **internal**\n        buffer, which is the buffer this call flushes. A buffer of your\n        own from :func:`Sender.new_buffer` is neither flushed nor checked\n        here: the sender is never told which buffers exist, so it cannot\n        refuse on their behalf. Such a buffer keeps every byte written\n        into it, but a sender closed out from under it can no longer send\n        it \342\200\224 finish the row and flush it before closing.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_49close = {"close", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_49close, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_48close};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_49close(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
) {
  int __pyx_v_flush;
  #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_flush,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(0, 13665, __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(0, 13665, __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(0, 13665, __pyx_L3_error)
    } else {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 13665, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    if (values[0]) {
      __pyx_v_flush = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_flush == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 13665, __pyx_L3_error)
    } else {
      __pyx_v_flush = ((int)1);
    }
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("close", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 13665, __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.Sender.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_48close(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self), __pyx_v_flush);

  /* 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_6Sender_48close(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, int __pyx_v_flush) {
  PyObject *__pyx_r = NULL;
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.flush = __pyx_v_flush;
  __pyx_t_1 = __pyx_vtabptr_7questdb_7_client_Sender->close(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13665, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client.Sender.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_49close, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender_close, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[243])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 13665, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_17, __pyx_mstate_global->__pyx_tuple[56]);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_close, __pyx_t_17) < (0)) __PYX_ERR(0, 13665, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
/* … */
  __pyx_mstate_global->__pyx_tuple[56] = PyTuple_Pack(1, Py_True); if (unlikely(!__pyx_mstate_global->__pyx_tuple[56])) __PYX_ERR(0, 13665, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[56]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[56]);
/* … */
struct __pyx_opt_args_7questdb_7_client_6Sender_close {
  int __pyx_n;
  int flush;
};
 13666:         """
 13667:         Disconnect.
 13668: 
 13669:         This method is idempotent and can be called repeatedly.
 13670: 
 13671:         Once a sender is closed, it can't be re-used.
 13672: 
 13673:         :param bool flush: If ``True``, flush the internal buffer before closing.
 13674:             For QWP/WebSocket, this also drains already-published frames before
 13675:             closing.
 13676: 
 13677:         Refused while a row is part-way through the sender's **internal**
 13678:         buffer, which is the buffer this call flushes. A buffer of your
 13679:         own from :func:`Sender.new_buffer` is neither flushed nor checked
 13680:         here: the sender is never told which buffers exist, so it cannot
 13681:         refuse on their behalf. Such a buffer keeps every byte written
 13682:         into it, but a sender closed out from under it can no longer send
 13683:         it — finish the row and flush it before closing.
 13684:         """
+13685:         self._check_not_in_own_callback('close')
  __pyx_t_7 = __pyx_f_7questdb_7_client_6Sender__check_not_in_own_callback(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_close, NULL); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13685, __pyx_L1_error)
 13686:         # The internal buffer is the one this call flushes, so it is the
 13687:         # one held to "no row part-way through" -- the same rule
 13688:         # `flush(buffer)` applies to whichever buffer it was handed.
 13689:         # Refused outright rather than by way of the flush below:
 13690:         # `_close()` runs from the `finally` whatever the flush does, so
 13691:         # a refusal there would still close the sender and take the
 13692:         # already-buffered rows with it. With `flush=False` there is no
 13693:         # flush to refuse at all.
+13694:         if self._buffer is not None:
  __pyx_t_8 = (((PyObject *)__pyx_v_self->_buffer) != Py_None);
  if (__pyx_t_8) {
/* … */
  }
+13695:             self._buffer._check_not_in_row('close')
    __pyx_t_7 = __pyx_f_7questdb_7_client_6Buffer__check_not_in_row(__pyx_v_self->_buffer, __pyx_mstate_global->__pyx_n_u_close, NULL); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13695, __pyx_L1_error)
+13696:         try:
  /*try:*/ {
+13697:             if (flush and (self._impl != NULL) and
    if (__pyx_v_flush) {
    } else {
      __pyx_t_8 = __pyx_v_flush;
      goto __pyx_L8_bool_binop_done;
    }
    __pyx_t_9 = (__pyx_v_self->_impl != NULL);
    if (__pyx_t_9) {
    } else {
      __pyx_t_8 = __pyx_t_9;
      goto __pyx_L8_bool_binop_done;
    }
/* … */
    if (__pyx_t_8) {
/* … */
    }
  }
+13698:                     (not line_sender_must_close(self._impl))):
    __pyx_t_9 = (!line_sender_must_close(__pyx_v_self->_impl));
    __pyx_t_8 = __pyx_t_9;
    __pyx_L8_bool_binop_done:;
+13699:                 self.flush(None, True)
      __pyx_t_10.__pyx_n = 2;
      __pyx_t_10.buffer = ((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None);
      __pyx_t_10.clear = 1;
      __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_self->__pyx_vtab)->flush(__pyx_v_self, 0, &__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13699, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+13700:                 if _is_qwp_ws_protocol(self._c_protocol):
      __pyx_t_8 = __pyx_f_7questdb_7_client__is_qwp_ws_protocol(__pyx_v_self->_c_protocol); if (unlikely(__pyx_t_8 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 13700, __pyx_L5_error)
      if (__pyx_t_8) {
/* … */
      }
+13701:                     self.close_drain()
        __pyx_t_2 = ((PyObject *)__pyx_v_self);
        __Pyx_INCREF(__pyx_t_2);
        __pyx_t_6 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
          __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_close_drain, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13701, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_1);
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 13702:         finally:
+13703:             self._close()
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_self->__pyx_vtab)->_close(__pyx_v_self, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13703, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L6;
    }
    __pyx_L5_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
      __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;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
      if ( unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
      __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_XGOTREF(__pyx_t_19);
      __pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
      {
        __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_self->__pyx_vtab)->_close(__pyx_v_self, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13703, __pyx_L13_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __Pyx_XGIVEREF(__pyx_t_17);
      __Pyx_XGIVEREF(__pyx_t_18);
      __Pyx_XGIVEREF(__pyx_t_19);
      __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
      __Pyx_XGIVEREF(__pyx_t_14);
      __Pyx_XGIVEREF(__pyx_t_15);
      __Pyx_XGIVEREF(__pyx_t_16);
      __Pyx_ErrRestore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
      __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
      __pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
      goto __pyx_L1_error;
      __pyx_L13_error:;
      __Pyx_XGIVEREF(__pyx_t_17);
      __Pyx_XGIVEREF(__pyx_t_18);
      __Pyx_XGIVEREF(__pyx_t_19);
      __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
      __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L6:;
  }
 13704: 
+13705:     def __exit__(self, exc_type, exc_val, exc_tb):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_6Sender_51__exit__(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_6Sender_50__exit__, "\n        Flush pending and disconnect at the end of a ``with`` block.\n\n        If the ``with`` block raises an exception, any pending data will\n        *NOT* be flushed.\n\n        This is implemented by calling :func:`Sender.close`.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_6Sender_51__exit__ = {"__exit__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_6Sender_51__exit__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_6Sender_50__exit__};
static PyObject *__pyx_pw_7questdb_7_client_6Sender_51__exit__(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_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_exc_type,&__pyx_mstate_global->__pyx_n_u_exc_val,&__pyx_mstate_global->__pyx_n_u_exc_tb,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(0, 13705, __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(0, 13705, __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(0, 13705, __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(0, 13705, __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(0, 13705, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, i); __PYX_ERR(0, 13705, __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(0, 13705, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 13705, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 13705, __pyx_L3_error)
    }
    __pyx_v_exc_type = values[0];
    __pyx_v_exc_val = values[1];
    __pyx_v_exc_tb = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 13705, __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.Sender.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_6Sender_50__exit__(((struct __pyx_obj_7questdb_7_client_Sender *)__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_6Sender_50__exit__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self, 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_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client.Sender.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_6Sender_51__exit__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Sender___exit, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[244])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 13705, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, __pyx_mstate_global->__pyx_n_u_exit, __pyx_t_17) < (0)) __PYX_ERR(0, 13705, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 13706:         """
 13707:         Flush pending and disconnect at the end of a ``with`` block.
 13708: 
 13709:         If the ``with`` block raises an exception, any pending data will
 13710:         *NOT* be flushed.
 13711: 
 13712:         This is implemented by calling :func:`Sender.close`.
 13713:         """
+13714:         self.close(not exc_type)
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_exc_type); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 13714, __pyx_L1_error)
  __pyx_t_3.__pyx_n = 1;
  __pyx_t_3.flush = (!__pyx_t_1);
  __pyx_t_2 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_self->__pyx_vtab)->close(__pyx_v_self, 0, &__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13714, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 13715: 
+13716:     def __dealloc__(self):
/* Python wrapper */
static void __pyx_pw_7questdb_7_client_6Sender_53__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7questdb_7_client_6Sender_53__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_6Sender_52__dealloc__(((struct __pyx_obj_7questdb_7_client_Sender *)__pyx_v_self));

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

static void __pyx_pf_7questdb_7_client_6Sender_52__dealloc__(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_self) {
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_WriteUnraisable("questdb._client.Sender.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}
+13717:         self._close(dealloc=True)
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.dealloc = 1;
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_self->__pyx_vtab)->_close(__pyx_v_self, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13717, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+13718:         free(self._last_flush_ms)
  free(__pyx_v_self->_last_flush_ms);
 13719: 
 13720: 
+13721: cdef void_int _sender_hold_bearer(Sender sender, object holder) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__sender_hold_bearer(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender, PyObject *__pyx_v_holder) {
  __pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client._sender_hold_bearer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 13722:     """Keep `holder`, the sender's bearer-token holder, alive with `sender`,
 13723:     or release it with `None`.
 13724: 
 13725:     CPython keeps it in a typed slot, which its cycle collector traverses.
 13726:     PyPy cannot see references held in cpyext fields, so there it goes in the
 13727:     instance dictionary instead, which keeps a provider that owns its own
 13728:     sender collectable.
 13729:     """
+13730:     if CYTHON_COMPILING_IN_PYPY:
  __pyx_t_1 = (CYTHON_COMPILING_IN_PYPY != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+13731:         PyObject_GenericSetAttr(sender, '_bearer_token_provider', holder)
    __pyx_t_2 = PyObject_GenericSetAttr(((PyObject *)__pyx_v_sender), __pyx_mstate_global->__pyx_n_u_bearer_token_provider, __pyx_v_holder); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 13731, __pyx_L1_error)
 13732:     else:
+13733:         sender._bearer_holder = holder
  /*else*/ {
    __Pyx_INCREF(__pyx_v_holder);
    __Pyx_GIVEREF(__pyx_v_holder);
    __Pyx_GOTREF(__pyx_v_sender->_bearer_holder);
    __Pyx_DECREF(__pyx_v_sender->_bearer_holder);
    __pyx_v_sender->_bearer_holder = __pyx_v_holder;
  }
  __pyx_L3:;
+13734:     return 0
  __pyx_r = 0;
  goto __pyx_L0;
 13735: 
 13736: 
+13737: cdef object _sender_bearer_holder(Sender sender):
static PyObject *__pyx_f_7questdb_7_client__sender_bearer_holder(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb._client._sender_bearer_holder", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 13738:     """The holder `_sender_hold_bearer` keeps alive with `sender`, or None."""
+13739:     if CYTHON_COMPILING_IN_PYPY:
  __pyx_t_1 = (CYTHON_COMPILING_IN_PYPY != 0);
  if (__pyx_t_1) {
/* … */
  }
+13740:         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;
      __pyx_L7_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;
    }
+13741:             return PyObject_GenericGetAttr(sender, '_bearer_token_provider')
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_5 = PyObject_GenericGetAttr(((PyObject *)__pyx_v_sender), __pyx_mstate_global->__pyx_n_u_bearer_token_provider); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13741, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_r = __pyx_t_5;
        __pyx_t_5 = 0;
        goto __pyx_L8_try_return;
+13742:         except AttributeError:
      __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_AttributeError))));
      if (__pyx_t_6) {
        __Pyx_ErrRestore(0,0,0);
+13743:             return None
        __Pyx_XDECREF(__pyx_r);
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
        goto __pyx_L7_except_return;
      }
      goto __pyx_L6_except_error;
+13744:     return sender._bearer_holder
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_sender->_bearer_holder);
  __pyx_r = __pyx_v_sender->_bearer_holder;
  goto __pyx_L0;
 13745: 
 13746: 
+13747: cdef inline void _sender_drop_unused_dict(Sender sender) noexcept:
static CYTHON_INLINE void __pyx_f_7questdb_7_client__sender_drop_unused_dict(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender) {
/* … */
  /* function exit code */
}
 13748:     """Drop the instance dictionary that reading `sender.__dict__` recreates.
 13749: 
 13750:     `__cinit__` drops the one Cython creates, but any read of `__dict__` --
 13751:     `dir()`, `vars()`, `inspect.getattr_static()`, an IDE completing
 13752:     `sender.` -- makes a new one, and while it exists CPython cannot cache
 13753:     the method lookup of `sender.row(...)`: every later row pays for the
 13754:     generic lookup. `__dir__` drops it at once, and `_flush_c_buf` drops one
 13755:     any other read left.
 13756: 
 13757:     On CPython the client stores nothing in a `Sender`'s own dictionary --
 13758:     `__setattr__` refuses new names, and the bearer-token holder has a typed
 13759:     slot -- and only an empty one is dropped. A subclass's dictionary holds
 13760:     its own attributes and is left alone. PyPy keeps the dictionary.
 13761:     """
+13762:     if type(sender) is Sender:
  __pyx_t_1 = (((PyObject *)Py_TYPE(((PyObject *)__pyx_v_sender))) == ((PyObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender));
  if (__pyx_t_1) {
/* … */
  }
+13763:         qdb_drop_empty_instance_dict(sender)
    qdb_drop_empty_instance_dict(((PyObject *)__pyx_v_sender));
 13764: 
 13765: 
+13766: def _debug_instance_dict_is_set(object obj):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_121_debug_instance_dict_is_set(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_120_debug_instance_dict_is_set, "Internal test seam: whether `obj` carries an instance dictionary, read\n    without creating one as `obj.__dict__` does. `None` when its type keeps\n    the dictionary elsewhere.");
static PyMethodDef __pyx_mdef_7questdb_7_client_121_debug_instance_dict_is_set = {"_debug_instance_dict_is_set", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_121_debug_instance_dict_is_set, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_120_debug_instance_dict_is_set};
static PyObject *__pyx_pw_7questdb_7_client_121_debug_instance_dict_is_set(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_obj = 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_instance_dict_is_set (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_obj,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(0, 13766, __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(0, 13766, __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_instance_dict_is_set", 0) < (0)) __PYX_ERR(0, 13766, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_instance_dict_is_set", 1, 1, 1, i); __PYX_ERR(0, 13766, __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(0, 13766, __pyx_L3_error)
    }
    __pyx_v_obj = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_debug_instance_dict_is_set", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 13766, __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_instance_dict_is_set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_120_debug_instance_dict_is_set(__pyx_self, __pyx_v_obj);
  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_120_debug_instance_dict_is_set(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_obj) {
  int __pyx_v_state;
  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_AddTraceback("questdb._client._debug_instance_dict_is_set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_121_debug_instance_dict_is_set, 0, __pyx_mstate_global->__pyx_n_u_debug_instance_dict_is_set, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[247])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 13766, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_instance_dict_is_set, __pyx_t_17) < (0)) __PYX_ERR(0, 13766, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 13767:     """Internal test seam: whether `obj` carries an instance dictionary, read
 13768:     without creating one as `obj.__dict__` does. `None` when its type keeps
 13769:     the dictionary elsewhere."""
+13770:     cdef int state = qdb_instance_dict_is_set(obj)
  __pyx_v_state = qdb_instance_dict_is_set(__pyx_v_obj);
+13771:     return None if state < 0 else bool(state)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = (__pyx_v_state < 0);
  if (__pyx_t_2) {
    __Pyx_INCREF(Py_None);
    __pyx_t_1 = Py_None;
  } else {
    __pyx_t_4 = NULL;
    __pyx_t_5 = __Pyx_PyLong_From_int(__pyx_v_state); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 13771, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_5};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __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(0, 13771, __pyx_L1_error)
      __Pyx_GOTREF((PyObject *)__pyx_t_3);
    }
    __pyx_t_1 = ((PyObject *)__pyx_t_3);
    __pyx_t_3 = 0;
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 13772: 
 13773: 
 13774: # QWP/WebSocket row auto-flush, shared by a standalone `Sender` and a
 13775: # `PooledSender` lease: each function takes both, exactly one of them set.
 13776: 
+13777: cdef void_int _qwp_row_add(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__qwp_row_add(CYTHON_UNUSED struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender, struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_pooled, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buf, PyObject *__pyx_v_table_name, PyObject *__pyx_v_symbols, PyObject *__pyx_v_columns, PyObject *__pyx_v_at) {
  int __pyx_v_starts_batch;
  __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._qwp_row_add", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}
 13778:         Sender sender,
 13779:         PooledSender pooled,
 13780:         Buffer buf,
 13781:         str table_name,
 13782:         dict symbols,
 13783:         dict columns,
 13784:         object at) except -1:
 13785:     """
 13786:     Append a row, holding the rewind point just before it. A row whose
 13787:     values are all `None` writes nothing and leaves no rewind point.
 13788:     """
+13789:     cdef bint starts_batch = line_sender_buffer_row_count(buf._impl) == 0
  __pyx_v_starts_batch = (line_sender_buffer_row_count(__pyx_v_buf->_impl) == 0);
+13790:     buf._row(False, table_name, symbols, columns, at, True)
  __pyx_t_2.__pyx_n = 4;
  __pyx_t_2.symbols = __pyx_v_symbols;
  __pyx_t_2.columns = __pyx_v_columns;
  __pyx_t_2.at = __pyx_v_at;
  __pyx_t_2.keep_marker = 1;
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_Buffer *)__pyx_v_buf->__pyx_vtab)->_row(__pyx_v_buf, 0, __pyx_v_table_name, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13790, __pyx_L1_error)
+13791:     if pooled is not None and starts_batch:
  __pyx_t_4 = (((PyObject *)__pyx_v_pooled) != Py_None);
  if (__pyx_t_4) {
  } else {
    __pyx_t_3 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __pyx_v_starts_batch;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_3) {
/* … */
  }
+13792:         pooled._batch_started_ms = line_sender_now_micros() // 1000
    __pyx_v_pooled->_batch_started_ms = __Pyx_div_int64_t(line_sender_now_micros(), 0x3E8, 1);
 13793: 
 13794: 
+13795: cdef bint _qwp_row_due(
static int __pyx_f_7questdb_7_client__qwp_row_due(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender, struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_pooled, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buf, size_t *__pyx_v_hard_cap) {
  struct __pyx_t_7questdb_7_client_auto_flush_mode_t *__pyx_v_mode;
  int __pyx_v_bytes_dynamic;
  int64_t __pyx_v_interval_start_ms;
  bool __pyx_v_server_cap_known;
  struct line_sender_error *__pyx_v_err;
  int __pyx_v_ok;
  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_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("questdb._client._qwp_row_due", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 13796:         Sender sender,
 13797:         PooledSender pooled,
 13798:         Buffer buf,
 13799:         size_t* hard_cap) except -1:
 13800:     """
 13801:     Whether the row buffer is due for auto-flush, reporting the frame cap
 13802:     it plans for through `hard_cap` (see `_qwp_row_planning_cap`).
 13803:     """
 13804:     cdef auto_flush_mode_t* mode
 13805:     cdef bint bytes_dynamic
 13806:     cdef int64_t interval_start_ms
+13807:     cdef cbool server_cap_known = False
  __pyx_v_server_cap_known = 0;
+13808:     cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 13809:     cdef bint ok
+13810:     if pooled is not None:
  __pyx_t_1 = (((PyObject *)__pyx_v_pooled) != Py_None);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+13811:         mode = &pooled._handle._auto_flush_mode
    __pyx_v_mode = (&__pyx_v_pooled->_handle->_auto_flush_mode);
+13812:         if not mode.enabled:
    __pyx_t_1 = (!__pyx_v_mode->enabled);
    if (__pyx_t_1) {
/* … */
    }
+13813:             return False
      __pyx_r = 0;
      goto __pyx_L0;
+13814:         bytes_dynamic = pooled._handle._auto_flush_bytes_dynamic
    __pyx_t_1 = __pyx_v_pooled->_handle->_auto_flush_bytes_dynamic;
    __pyx_v_bytes_dynamic = __pyx_t_1;
+13815:         interval_start_ms = pooled._batch_started_ms
    __pyx_t_2 = __pyx_v_pooled->_batch_started_ms;
    __pyx_v_interval_start_ms = __pyx_t_2;
+13816:         ok = qwp_sender_effective_frame_cap(
    __pyx_v_ok = qwp_sender_effective_frame_cap(__pyx_v_pooled->_qwp, __pyx_v_hard_cap, (&__pyx_v_server_cap_known), (&__pyx_v_err));
 13817:             pooled._qwp, hard_cap, &server_cap_known, &err)
 13818:     else:
+13819:         mode = &sender._auto_flush_mode
  /*else*/ {
    __pyx_v_mode = (&__pyx_v_sender->_auto_flush_mode);
+13820:         if not mode.enabled:
    __pyx_t_1 = (!__pyx_v_mode->enabled);
    if (__pyx_t_1) {
/* … */
    }
+13821:             return False
      __pyx_r = 0;
      goto __pyx_L0;
+13822:         if sender._impl == NULL:
    __pyx_t_1 = (__pyx_v_sender->_impl == NULL);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+13823:             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(0, 13823, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
+13824:                 QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13824, __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(0, 13824, __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_row_can_t_be_called_Sender_is_cl};
        __pyx_t_3 = __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_3)) __PYX_ERR(0, 13823, __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(0, 13823, __pyx_L1_error)
 13825:                 "row() can't be called: Sender is closed.")
+13826:         bytes_dynamic = sender._auto_flush_bytes_dynamic
    __pyx_t_1 = __pyx_v_sender->_auto_flush_bytes_dynamic;
    __pyx_v_bytes_dynamic = __pyx_t_1;
+13827:         interval_start_ms = sender._last_flush_ms[0]
    __pyx_v_interval_start_ms = (__pyx_v_sender->_last_flush_ms[0]);
+13828:         ok = line_sender_qwpws_effective_frame_cap(
    __pyx_v_ok = line_sender_qwpws_effective_frame_cap(__pyx_v_sender->_impl, __pyx_v_hard_cap, (&__pyx_v_server_cap_known), (&__pyx_v_err));
  }
  __pyx_L3:;
 13829:             sender._impl, hard_cap, &server_cap_known, &err)
+13830:     if not ok:
  __pyx_t_1 = (!__pyx_v_ok);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+13831:         raise c_err_to_py(err)
    __pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13831, __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(0, 13831, __pyx_L1_error)
+13832:     hard_cap[0] = _qwp_row_planning_cap(hard_cap[0], server_cap_known)
  (__pyx_v_hard_cap[0]) = __pyx_f_7questdb_7_client__qwp_row_planning_cap((__pyx_v_hard_cap[0]), __pyx_v_server_cap_known);
+13833:     return _qwp_row_should_auto_flush(
  __pyx_r = __pyx_f_7questdb_7_client__qwp_row_should_auto_flush(__pyx_v_mode, __pyx_v_bytes_dynamic, __pyx_v_buf->_impl, (__pyx_v_hard_cap[0]), __pyx_v_interval_start_ms);
  goto __pyx_L0;
 13834:         mode,
 13835:         bytes_dynamic,
 13836:         buf._impl,
 13837:         hard_cap[0],
 13838:         interval_start_ms)
 13839: 
 13840: 
+13841: cdef void_int _qwp_row_publish(Sender sender, PooledSender pooled) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__qwp_row_publish(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender, struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_pooled) {
  __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_3);
  __Pyx_AddTraceback("questdb._client._qwp_row_publish", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 13842:     """
 13843:     Publish the whole row buffer as one frame and clear it.
 13844: 
 13845:     A `BatchTooLarge` refusal publishes nothing and leaves the buffer intact
 13846:     on both senders. After any other failure a pooled lease keeps its rows
 13847:     and a standalone sender has cleared them, as their `flush()` does.
 13848:     """
+13849:     if pooled is not None:
  __pyx_t_1 = (((PyObject *)__pyx_v_pooled) != Py_None);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+13850:         pooled._flush_locked(False)
    __pyx_t_2 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_pooled->__pyx_vtab)->_flush_locked(__pyx_v_pooled, 0); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13850, __pyx_L1_error)
 13851:     else:
+13852:         sender._flush_c_buf(sender._buffer, True, False, True)
  /*else*/ {
    __pyx_t_3 = ((PyObject *)__pyx_v_sender->_buffer);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_2 = ((struct __pyx_vtabstruct_7questdb_7_client_Sender *)__pyx_v_sender->__pyx_vtab)->_flush_c_buf(__pyx_v_sender, ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_3), 1, 0, 1); if (unlikely(__pyx_t_2 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13852, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __pyx_L3:;
 13853: 
 13854: 
+13855: cdef void_int _qwp_row_reject(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__qwp_row_reject(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_pooled, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buf, PyObject *__pyx_v_exc, int __pyx_v_earlier_rows_published) {
  __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_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("questdb._client._qwp_row_reject", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 13856:         PooledSender pooled,
 13857:         Buffer buf,
 13858:         object exc,
 13859:         bint earlier_rows_published) except -1:
 13860:     """Remove the newest row, which does not fit in a frame on its own."""
+13861:     buf._rewind_to_marker()
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__rewind_to_marker(__pyx_v_buf); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13861, __pyx_L1_error)
+13862:     if pooled is not None:
  __pyx_t_2 = (((PyObject *)__pyx_v_pooled) != Py_None);
  if (__pyx_t_2) {
/* … */
  }
+13863:         pooled._batch_started_ms = 0
    __pyx_v_pooled->_batch_started_ms = 0;
+13864:     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(0, 13864, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
+13865:         QuestDBErrorCode.BatchTooLarge,
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13865, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_BatchTooLarge); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 13865, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 13866:         'The row was not added: it does not fit in one QWP/WebSocket '
 13867:         'frame on its own. '
+13868:         + ('The rows buffered before it were published. '
  __pyx_t_8 = __Pyx_PyUnicode_ConcatSafe(__pyx_mstate_global->__pyx_kp_u_The_row_was_not_added_it_does_no, __pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13868, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+13869:            if earlier_rows_published else '')
  if (__pyx_v_earlier_rows_published) {
    __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_The_rows_buffered_before_it_were);
    __pyx_t_6 = __pyx_mstate_global->__pyx_kp_u_The_rows_buffered_before_it_were;
  } else {
    __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u__7);
    __pyx_t_6 = __pyx_mstate_global->__pyx_kp_u__7;
  }
+13870:         + str(exc)) from exc
  __pyx_t_6 = __Pyx_PyObject_Unicode(__pyx_v_exc); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 13870, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_9 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_8, __pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 13870, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __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_3 = __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_3)) __PYX_ERR(0, 13864, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __Pyx_Raise(__pyx_t_3, 0, 0, __pyx_v_exc);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __PYX_ERR(0, 13864, __pyx_L1_error)
 13871: 
 13872: 
+13873: cdef object _qwp_row_not_added(object exc, bint earlier_rows_published):
static PyObject *__pyx_f_7questdb_7_client__qwp_row_not_added(PyObject *__pyx_v_exc, int __pyx_v_earlier_rows_published) {
  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._qwp_row_not_added", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 13874:     """
 13875:     `exc`, a publish failure other than `BatchTooLarge`, with its message
 13876:     saying that the row was not added.
 13877:     """
+13878:     return _error_with_message(
  __Pyx_XDECREF(__pyx_r);
/* … */
  __pyx_t_1 = __pyx_f_7questdb_7_client__error_with_message(__pyx_v_exc, ((PyObject*)__pyx_t_3)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13878, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 13879:         exc,
 13880:         'The row was not added. '
+13881:         + ('The rows buffered before it were published. '
  __pyx_t_2 = __Pyx_PyUnicode_ConcatSafe(__pyx_mstate_global->__pyx_kp_u_The_row_was_not_added, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13881, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+13882:            if earlier_rows_published else '')
  if (__pyx_v_earlier_rows_published) {
    __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_The_rows_buffered_before_it_were);
    __pyx_t_1 = __pyx_mstate_global->__pyx_kp_u_The_rows_buffered_before_it_were;
  } else {
    __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u__7);
    __pyx_t_1 = __pyx_mstate_global->__pyx_kp_u__7;
  }
+13883:         + str(exc))
  __pyx_t_1 = __Pyx_PyObject_Unicode(__pyx_v_exc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13883, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13883, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 13884: 
 13885: 
+13886: def _debug_qwp_row_not_added(object exc, bint earlier_rows_published):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_123_debug_qwp_row_not_added(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_122_debug_qwp_row_not_added, "Internal test seam: the exception `row()` raises for publish failure\n    `exc`.");
static PyMethodDef __pyx_mdef_7questdb_7_client_123_debug_qwp_row_not_added = {"_debug_qwp_row_not_added", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_123_debug_qwp_row_not_added, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_122_debug_qwp_row_not_added};
static PyObject *__pyx_pw_7questdb_7_client_123_debug_qwp_row_not_added(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_exc = 0;
  int __pyx_v_earlier_rows_published;
  #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_qwp_row_not_added (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_exc,&__pyx_mstate_global->__pyx_n_u_earlier_rows_published,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(0, 13886, __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(0, 13886, __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(0, 13886, __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_qwp_row_not_added", 0) < (0)) __PYX_ERR(0, 13886, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_qwp_row_not_added", 1, 2, 2, i); __PYX_ERR(0, 13886, __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(0, 13886, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 13886, __pyx_L3_error)
    }
    __pyx_v_exc = values[0];
    __pyx_v_earlier_rows_published = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_earlier_rows_published == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 13886, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_debug_qwp_row_not_added", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 13886, __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_qwp_row_not_added", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_122_debug_qwp_row_not_added(__pyx_self, __pyx_v_exc, __pyx_v_earlier_rows_published);
  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_122_debug_qwp_row_not_added(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_exc, int __pyx_v_earlier_rows_published) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client._debug_qwp_row_not_added", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_123_debug_qwp_row_not_added, 0, __pyx_mstate_global->__pyx_n_u_debug_qwp_row_not_added, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[248])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 13886, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_qwp_row_not_added, __pyx_t_17) < (0)) __PYX_ERR(0, 13886, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 13887:     """Internal test seam: the exception `row()` raises for publish failure
 13888:     `exc`."""
+13889:     return _qwp_row_not_added(exc, earlier_rows_published)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7questdb_7_client__qwp_row_not_added(__pyx_v_exc, __pyx_v_earlier_rows_published); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13889, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 13890: 
 13891: 
+13892: cdef void_int _qwp_row_split(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__qwp_row_split(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender, struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_pooled, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buf, PyObject *__pyx_v_table_name, PyObject *__pyx_v_symbols, PyObject *__pyx_v_columns, PyObject *__pyx_v_at) {
  size_t __pyx_v_hard_cap;
  size_t __pyx_v_discarded;
  PyObject *__pyx_v_exc = NULL;
  __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_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_AddTraceback("questdb._client._qwp_row_split", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 13893:         Sender sender,
 13894:         PooledSender pooled,
 13895:         Buffer buf,
 13896:         str table_name,
 13897:         dict symbols,
 13898:         dict columns,
 13899:         object at) except -1:
 13900:     """
 13901:     Publish the rows buffered before the newest one as a frame of their
 13902:     own, then add the newest row back to start the next batch.
 13903:     """
+13904:     cdef size_t hard_cap = 0
  __pyx_v_hard_cap = 0;
 13905:     cdef size_t discarded
+13906:     buf._rewind_to_marker()
  __pyx_t_1 = __pyx_f_7questdb_7_client_6Buffer__rewind_to_marker(__pyx_v_buf); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13906, __pyx_L1_error)
+13907:     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_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:;
  }
+13908:         _qwp_row_publish(sender, pooled)
      __pyx_t_1 = __pyx_f_7questdb_7_client__qwp_row_publish(__pyx_v_sender, __pyx_v_pooled); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13908, __pyx_L3_error)
+13909:     except QuestDBError as exc:
    __Pyx_ErrFetch(&__pyx_t_5, &__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(0, 13909, __pyx_L5_except_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_5, __pyx_t_8);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_ErrRestore(__pyx_t_5, __pyx_t_6, __pyx_t_7);
    __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0;
    if (__pyx_t_9) {
      __Pyx_AddTraceback("questdb._client._qwp_row_split", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5) < 0) __PYX_ERR(0, 13909, __pyx_L5_except_error)
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_v_exc = __pyx_t_6;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L14_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0;
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __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;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
           __Pyx_ExceptionSwap(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25);
          if ( unlikely(__Pyx_GetException(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22) < 0)) __Pyx_ErrFetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
          __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_XGOTREF(__pyx_t_25);
          __pyx_t_9 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_19 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
          }
          __Pyx_XGIVEREF(__pyx_t_23);
          __Pyx_XGIVEREF(__pyx_t_24);
          __Pyx_XGIVEREF(__pyx_t_25);
          __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_24, __pyx_t_25);
          __Pyx_XGIVEREF(__pyx_t_20);
          __Pyx_XGIVEREF(__pyx_t_21);
          __Pyx_XGIVEREF(__pyx_t_22);
          __Pyx_ErrRestore(__pyx_t_20, __pyx_t_21, __pyx_t_22);
          __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0;
          __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_19;
          goto __pyx_L5_except_error;
        }
      }
    }
    goto __pyx_L5_except_error;
+13910:         if exc.code == QuestDBErrorCode.BatchTooLarge:
        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13910, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 13910, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_BatchTooLarge); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 13910, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_10 = PyObject_RichCompare(__pyx_t_8, __pyx_t_11, Py_EQ); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 13910, __pyx_L14_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 13910, __pyx_L14_error)
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        if (__pyx_t_12) {
/* … */
        }
 13911:             # No frame can carry these rows, and the routine cannot cut
 13912:             # them any finer: it removes only the newest row.
+13913:             discarded = line_sender_buffer_row_count(buf._impl)
          __pyx_v_discarded = line_sender_buffer_row_count(__pyx_v_buf->_impl);
+13914:             line_sender_buffer_clear(buf._impl)
          line_sender_buffer_clear(__pyx_v_buf->_impl);
+13915:             if pooled is not None:
          __pyx_t_12 = (((PyObject *)__pyx_v_pooled) != Py_None);
          if (__pyx_t_12) {
/* … */
          }
+13916:                 qdb_pystr_buf_clear(buf._b)
            qdb_pystr_buf_clear(__pyx_v_buf->_b);
+13917:                 pooled._batch_started_ms = 0
            __pyx_v_pooled->_batch_started_ms = 0;
+13918:             raise QuestDBError(
          __pyx_t_11 = NULL;
          __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13918, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_8);
+13919:                 QuestDBErrorCode.BatchTooLarge,
          __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 13919, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_BatchTooLarge); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 13919, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_14);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+13920:                 f'{discarded} buffered '
          __pyx_t_13 = __Pyx_PyUnicode_From_size_t(__pyx_v_discarded, 0, ' ', 'd'); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 13920, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_15 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_13, __pyx_mstate_global->__pyx_kp_u_buffered); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 13920, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+13921:                 + ('row was' if discarded == 1 else 'rows were')
          __pyx_t_12 = (__pyx_v_discarded == 1);
          if (__pyx_t_12) {
            __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_row_was);
            __pyx_t_13 = __pyx_mstate_global->__pyx_kp_u_row_was;
          } else {
            __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_rows_were);
            __pyx_t_13 = __pyx_mstate_global->__pyx_kp_u_rows_were;
          }
          __pyx_t_16 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlaceSafe(__pyx_t_15, __pyx_t_13); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 13921, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_16);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+13922:                 + ' discarded and the row was not added: the buffered rows '
          __pyx_t_13 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_16, __pyx_mstate_global->__pyx_kp_u_discarded_and_the_row_was_not_a); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 13922, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
 13923:                 'do not fit in one QWP/WebSocket frame even without it. '
 13924:                 'This can happen when the frame cap shrinks, for example '
 13925:                 'on reconnect, or when a lazily connected sender learns '
 13926:                 "that the server's cap is below the default. "
+13927:                 + str(exc)) from exc
          __pyx_t_16 = __Pyx_PyObject_Unicode(__pyx_v_exc); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 13927, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_16);
          __pyx_t_15 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_13, __pyx_t_16); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 13927, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          __pyx_t_17 = 1;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(PyMethod_Check(__pyx_t_8))) {
            __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_8);
            assert(__pyx_t_11);
            PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
            __Pyx_INCREF(__pyx_t_11);
            __Pyx_INCREF(__pyx__function);
            __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
            __pyx_t_17 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_11, __pyx_t_14, __pyx_t_15};
            __pyx_t_10 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_17, (3-__pyx_t_17) | (__pyx_t_17*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 13918, __pyx_L14_error)
            __Pyx_GOTREF(__pyx_t_10);
          }
          __Pyx_Raise(__pyx_t_10, 0, 0, __pyx_v_exc);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __PYX_ERR(0, 13918, __pyx_L14_error)
 13928:         # The rows before the newest one are as the sender's `flush()`
 13929:         # leaves them, and the newest one stays out, so a pooled lease
 13930:         # keeps only rows that fit in one frame.
+13931:         raise _qwp_row_not_added(exc, False) from exc
        __pyx_t_10 = __pyx_f_7questdb_7_client__qwp_row_not_added(__pyx_v_exc, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 13931, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_Raise(__pyx_t_10, 0, 0, __pyx_v_exc);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __PYX_ERR(0, 13931, __pyx_L14_error)
      }
 13932:     # Converts the row's values a second time.
+13933:     _qwp_row_add(sender, pooled, buf, table_name, symbols, columns, at)
  __pyx_t_1 = __pyx_f_7questdb_7_client__qwp_row_add(__pyx_v_sender, __pyx_v_pooled, __pyx_v_buf, __pyx_v_table_name, __pyx_v_symbols, __pyx_v_columns, __pyx_v_at); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13933, __pyx_L1_error)
+13934:     if _qwp_row_due(sender, pooled, buf, &hard_cap):
  __pyx_t_12 = __pyx_f_7questdb_7_client__qwp_row_due(__pyx_v_sender, __pyx_v_pooled, __pyx_v_buf, (&__pyx_v_hard_cap)); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 13934, __pyx_L1_error)
  if (__pyx_t_12) {
/* … */
  }
+13935:         try:
    {
      /*try:*/ {
/* … */
      }
      __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;
      goto __pyx_L28_try_end;
      __pyx_L23_error:;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __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;
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 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_L25_except_error:;
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_3, __pyx_t_2);
      goto __pyx_L1_error;
      __pyx_L28_try_end:;
    }
+13936:             _qwp_row_publish(sender, pooled)
        __pyx_t_1 = __pyx_f_7questdb_7_client__qwp_row_publish(__pyx_v_sender, __pyx_v_pooled); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13936, __pyx_L23_error)
+13937:         except QuestDBError as exc:
      __Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
      __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 13937, __pyx_L25_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_18 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_5, __pyx_t_10);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_ErrRestore(__pyx_t_5, __pyx_t_6, __pyx_t_7);
      __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0;
      if (__pyx_t_18) {
        __Pyx_AddTraceback("questdb._client._qwp_row_split", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5) < 0) __PYX_ERR(0, 13937, __pyx_L25_except_error)
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_v_exc = __pyx_t_6;
        /*try:*/ {
/* … */
        /*finally:*/ {
          __pyx_L34_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_declare
            __Pyx_PyThreadState_assign
            __pyx_t_25 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0;
            __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            __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;
            __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
            __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
             __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20);
            if ( unlikely(__Pyx_GetException(&__pyx_t_25, &__pyx_t_24, &__pyx_t_23) < 0)) __Pyx_ErrFetch(&__pyx_t_25, &__pyx_t_24, &__pyx_t_23);
            __Pyx_XGOTREF(__pyx_t_25);
            __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_t_18 = __pyx_lineno; __pyx_t_9 = __pyx_clineno; __pyx_t_26 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
            }
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_XGIVEREF(__pyx_t_21);
            __Pyx_XGIVEREF(__pyx_t_20);
            __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_21, __pyx_t_20);
            __Pyx_XGIVEREF(__pyx_t_25);
            __Pyx_XGIVEREF(__pyx_t_24);
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_ErrRestore(__pyx_t_25, __pyx_t_24, __pyx_t_23);
            __pyx_t_25 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0;
            __pyx_lineno = __pyx_t_18; __pyx_clineno = __pyx_t_9; __pyx_filename = __pyx_t_26;
            goto __pyx_L25_except_error;
          }
        }
      }
      goto __pyx_L25_except_error;
+13938:             if exc.code == QuestDBErrorCode.BatchTooLarge:
          __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 13938, __pyx_L34_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13938, __pyx_L34_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_BatchTooLarge); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 13938, __pyx_L34_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __pyx_t_8 = PyObject_RichCompare(__pyx_t_10, __pyx_t_15, Py_EQ); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13938, __pyx_L34_error)
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 13938, __pyx_L34_error)
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (__pyx_t_12) {
/* … */
          }
+13939:                 _qwp_row_reject(pooled, buf, exc, True)
            __pyx_t_1 = __pyx_f_7questdb_7_client__qwp_row_reject(__pyx_v_pooled, __pyx_v_buf, __pyx_v_exc, 1); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13939, __pyx_L34_error)
+13940:             raise _qwp_row_not_added(exc, True) from exc
          __pyx_t_8 = __pyx_f_7questdb_7_client__qwp_row_not_added(__pyx_v_exc, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 13940, __pyx_L34_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_Raise(__pyx_t_8, 0, 0, __pyx_v_exc);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __PYX_ERR(0, 13940, __pyx_L34_error)
        }
 13941: 
 13942: 
+13943: cdef void_int _qwp_row_append(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__qwp_row_append(struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender, struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_pooled, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buf, PyObject *__pyx_v_table_name, PyObject *__pyx_v_symbols, PyObject *__pyx_v_columns, PyObject *__pyx_v_at) {
  size_t __pyx_v_hard_cap;
  size_t __pyx_v_row_count;
  int __pyx_v_split;
  PyObject *__pyx_v_exc = NULL;
  __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_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_AddTraceback("questdb._client._qwp_row_append", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 13944:         Sender sender,
 13945:         PooledSender pooled,
 13946:         Buffer buf,
 13947:         str table_name,
 13948:         dict symbols,
 13949:         dict columns,
 13950:         object at) except -1:
 13951:     """
 13952:     Append a row to a QWP/WebSocket row buffer and run auto-flush, keeping
 13953:     every published frame within the connection's frame cap.
 13954: 
 13955:     The whole buffer goes out as one frame when it fits. When it does not,
 13956:     or its size estimate is already past the cap, the rows buffered before
 13957:     the new one go out on their own and the new row starts the next batch,
 13958:     so a single call publishes at most two frames.
 13959: 
 13960:     Whatever this raises, the new row is not in the buffer. A
 13961:     `BatchTooLarge` means either it does not fit in a frame on its own, or
 13962:     the rows before it do not fit even without it, as after the frame cap
 13963:     shrinks, and those rows are discarded. After any other failure the rows
 13964:     before it are as the sender's `flush()` leaves them: a pooled lease
 13965:     keeps them and a standalone sender has cleared them.
 13966:     """
+13967:     cdef size_t hard_cap = 0
  __pyx_v_hard_cap = 0;
 13968:     cdef size_t row_count
 13969:     cdef bint split
+13970:     _qwp_row_add(sender, pooled, buf, table_name, symbols, columns, at)
  __pyx_t_1 = __pyx_f_7questdb_7_client__qwp_row_add(__pyx_v_sender, __pyx_v_pooled, __pyx_v_buf, __pyx_v_table_name, __pyx_v_symbols, __pyx_v_columns, __pyx_v_at); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13970, __pyx_L1_error)
+13971:     if not buf._marker_set:
  __pyx_t_2 = (!__pyx_v_buf->_marker_set);
  if (__pyx_t_2) {
/* … */
  }
 13972:         # Nothing was written, and the split and reject paths below need
 13973:         # the rewind point. Such a row triggers no auto-flush, as in
 13974:         # `Buffer._row`.
+13975:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
+13976:     try:
  /*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_L12_try_end;
      __pyx_L7_error:;
      __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_15); __pyx_t_15 = 0;
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
/* … */
      __pyx_L9_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_L5_error;
      __pyx_L11_try_return:;
      __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_L4_return;
      __pyx_L12_try_end:;
    }
  }
+13977:         if not _qwp_row_due(sender, pooled, buf, &hard_cap):
        __pyx_t_2 = __pyx_f_7questdb_7_client__qwp_row_due(__pyx_v_sender, __pyx_v_pooled, __pyx_v_buf, (&__pyx_v_hard_cap)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 13977, __pyx_L7_error)
        __pyx_t_6 = (!__pyx_t_2);
        if (__pyx_t_6) {
/* … */
        }
+13978:             return 0
          __pyx_r = 0;
          goto __pyx_L11_try_return;
+13979:         row_count = line_sender_buffer_row_count(buf._impl)
        __pyx_v_row_count = line_sender_buffer_row_count(__pyx_v_buf->_impl);
 13980:         # Past the cap, the estimate cannot tell whether the whole buffer
 13981:         # fits. The rows before the newest one fit unless the cap shrank:
 13982:         # they were under the threshold when the previous row was checked,
 13983:         # and the estimate does not undercount a frame (see
 13984:         # `line_sender_buffer_size`). So they go out on their own, without
 13985:         # first encoding the whole buffer to find out.
+13986:         split = (row_count > 1 and
        __pyx_t_2 = (__pyx_v_row_count > 1);
        if (__pyx_t_2) {
        } else {
          __pyx_t_6 = __pyx_t_2;
          goto __pyx_L14_bool_binop_done;
        }
+13987:                  line_sender_buffer_size(buf._impl) > hard_cap)
        __pyx_t_2 = (line_sender_buffer_size(__pyx_v_buf->_impl) > __pyx_v_hard_cap);
        __pyx_t_6 = __pyx_t_2;
        __pyx_L14_bool_binop_done:;
        __pyx_v_split = __pyx_t_6;
+13988:         if not split:
        __pyx_t_6 = (!__pyx_v_split);
        if (__pyx_t_6) {
/* … */
        }
+13989:             try:
          {
            /*try:*/ {
/* … */
            }
            __pyx_L17_error:;
/* … */
            __pyx_L19_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_L7_error;
            __pyx_L21_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_L11_try_return;
            __pyx_L18_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);
          }
+13990:                 _qwp_row_publish(sender, pooled)
              __pyx_t_1 = __pyx_f_7questdb_7_client__qwp_row_publish(__pyx_v_sender, __pyx_v_pooled); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13990, __pyx_L17_error)
+13991:                 return 0
              __pyx_r = 0;
              goto __pyx_L21_try_return;
+13992:             except QuestDBError as exc:
            __Pyx_ErrFetch(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
            __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 13992, __pyx_L19_except_error)
            __Pyx_GOTREF(__pyx_t_13);
            __pyx_t_14 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_10, __pyx_t_13);
            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
            __Pyx_ErrRestore(__pyx_t_10, __pyx_t_11, __pyx_t_12);
            __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
            if (__pyx_t_14) {
              __Pyx_AddTraceback("questdb._client._qwp_row_append", __pyx_clineno, __pyx_lineno, __pyx_filename);
              if (__Pyx_GetException(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10) < 0) __PYX_ERR(0, 13992, __pyx_L19_except_error)
              __Pyx_XGOTREF(__pyx_t_12);
              __Pyx_XGOTREF(__pyx_t_11);
              __Pyx_XGOTREF(__pyx_t_10);
              __Pyx_INCREF(__pyx_t_11);
              __pyx_v_exc = __pyx_t_11;
              /*try:*/ {
/* … */
              /*finally:*/ {
                /*normal exit:*/{
                  __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
                  goto __pyx_L29;
                }
                __pyx_L28_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_13); __pyx_t_13 = 0;
                  __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
                  __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 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_14 = __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_14; __pyx_clineno = __pyx_t_17; __pyx_filename = __pyx_t_18;
                  goto __pyx_L19_except_error;
                }
                __pyx_L29:;
              }
              __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
              __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
              __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
              goto __pyx_L18_exception_handled;
            }
            goto __pyx_L19_except_error;
+13993:                 if exc.code != QuestDBErrorCode.BatchTooLarge:
                __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 13993, __pyx_L28_error)
                __Pyx_GOTREF(__pyx_t_13);
                __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 13993, __pyx_L28_error)
                __Pyx_GOTREF(__pyx_t_15);
                __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_mstate_global->__pyx_n_u_BatchTooLarge); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 13993, __pyx_L28_error)
                __Pyx_GOTREF(__pyx_t_16);
                __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
                __pyx_t_15 = PyObject_RichCompare(__pyx_t_13, __pyx_t_16, Py_NE); __Pyx_XGOTREF(__pyx_t_15); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 13993, __pyx_L28_error)
                __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
                __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
                __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_15); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 13993, __pyx_L28_error)
                __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
                if (unlikely(__pyx_t_6)) {
/* … */
                }
+13994:                     raise _qwp_row_not_added(exc, False) from exc
                  __pyx_t_15 = __pyx_f_7questdb_7_client__qwp_row_not_added(__pyx_v_exc, 0); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 13994, __pyx_L28_error)
                  __Pyx_GOTREF(__pyx_t_15);
                  __Pyx_Raise(__pyx_t_15, 0, 0, __pyx_v_exc);
                  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
                  __PYX_ERR(0, 13994, __pyx_L28_error)
+13995:                 if row_count == 1:
                __pyx_t_6 = (__pyx_v_row_count == 1);
                if (__pyx_t_6) {
/* … */
                }
              }
+13996:                     _qwp_row_reject(pooled, buf, exc, False)
                  __pyx_t_1 = __pyx_f_7questdb_7_client__qwp_row_reject(__pyx_v_pooled, __pyx_v_buf, __pyx_v_exc, 0); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13996, __pyx_L28_error)
+13997:         _qwp_row_split(sender, pooled, buf, table_name, symbols, columns, at)
        __pyx_t_1 = __pyx_f_7questdb_7_client__qwp_row_split(__pyx_v_sender, __pyx_v_pooled, __pyx_v_buf, __pyx_v_table_name, __pyx_v_symbols, __pyx_v_columns, __pyx_v_at); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 13997, __pyx_L7_error)
+13998:     except:
      /*except:*/ {
        __Pyx_AddTraceback("questdb._client._qwp_row_append", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12) < 0) __PYX_ERR(0, 13998, __pyx_L9_except_error)
        __Pyx_XGOTREF(__pyx_t_10);
        __Pyx_XGOTREF(__pyx_t_11);
        __Pyx_XGOTREF(__pyx_t_12);
 13999:         # A path that removed the new row itself has spent the rewind
 14000:         # point, and a failed standalone publish has cleared the buffer,
 14001:         # rewind point included. Otherwise the row is still buffered, since
 14002:         # a failed publish leaves a pooled lease's rows in place, and it
 14003:         # comes out here.
+14004:         buf._rewind_after_failure()
        __pyx_t_15 = __pyx_f_7questdb_7_client_6Buffer__rewind_after_failure(__pyx_v_buf); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 14004, __pyx_L9_except_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+14005:         if (pooled is not None and
        __pyx_t_2 = (((PyObject *)__pyx_v_pooled) != Py_None);
        if (__pyx_t_2) {
        } else {
          __pyx_t_6 = __pyx_t_2;
          goto __pyx_L39_bool_binop_done;
        }
/* … */
        if (__pyx_t_6) {
/* … */
        }
+14006:                 line_sender_buffer_row_count(buf._impl) == 0):
        __pyx_t_2 = (line_sender_buffer_row_count(__pyx_v_buf->_impl) == 0);
        __pyx_t_6 = __pyx_t_2;
        __pyx_L39_bool_binop_done:;
+14007:             pooled._batch_started_ms = 0
          __pyx_v_pooled->_batch_started_ms = 0;
+14008:         raise
        __Pyx_GIVEREF(__pyx_t_10);
        __Pyx_GIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_ErrRestoreWithState(__pyx_t_10, __pyx_t_11, __pyx_t_12);
        __pyx_t_10 = 0;  __pyx_t_11 = 0;  __pyx_t_12 = 0; 
        __PYX_ERR(0, 14008, __pyx_L9_except_error)
      }
 14009:     finally:
+14010:         buf._clear_marker()
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_12 = __pyx_f_7questdb_7_client_6Buffer__clear_marker(__pyx_v_buf); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 14010, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      goto __pyx_L6;
    }
    __pyx_L5_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_5 = 0; __pyx_t_4 = 0; __pyx_t_3 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 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_15); __pyx_t_15 = 0;
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7);
      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_9);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_7);
      __pyx_t_17 = __pyx_lineno; __pyx_t_14 = __pyx_clineno; __pyx_t_25 = __pyx_filename;
      {
        __pyx_t_12 = __pyx_f_7questdb_7_client_6Buffer__clear_marker(__pyx_v_buf); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 14010, __pyx_L42_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      }
      __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);
      __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_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0;
      __pyx_lineno = __pyx_t_17; __pyx_clineno = __pyx_t_14; __pyx_filename = __pyx_t_25;
      goto __pyx_L1_error;
      __pyx_L42_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);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L4_return: {
      __pyx_t_1 = __pyx_r;
      __pyx_t_12 = __pyx_f_7questdb_7_client_6Buffer__clear_marker(__pyx_v_buf); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 14010, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_r = __pyx_t_1;
      goto __pyx_L0;
    }
    __pyx_L6:;
  }
 14011: 
 14012: 
+14013: @cython.no_gc_clear
struct __pyx_vtabstruct_7questdb_7_client_PooledSender {
  void (*_attach)(struct __pyx_obj_7questdb_7_client_PooledSender *, struct __pyx_obj_7questdb_7_client_QuestDB *, struct questdb_db *, struct qwp_sender *, struct __pyx_obj_7questdb_7_client_Buffer *);
  __pyx_t_7questdb_7_client_void_int (*_check_open)(struct __pyx_obj_7questdb_7_client_PooledSender *, PyObject *);
  __pyx_t_7questdb_7_client_void_int (*_lock_enter)(struct __pyx_obj_7questdb_7_client_PooledSender *, PyObject *);
  __pyx_t_7questdb_7_client_void_int (*_check_not_in_row)(struct __pyx_obj_7questdb_7_client_PooledSender *, PyObject *);
  struct __pyx_obj_7questdb_7_client_QuestDB *(*_enter_call_locked)(struct __pyx_obj_7questdb_7_client_PooledSender *);
  void (*_exit_call_locked)(struct __pyx_obj_7questdb_7_client_PooledSender *, struct __pyx_obj_7questdb_7_client_QuestDB *);
  __pyx_t_7questdb_7_client_void_int (*_check_not_mid_call)(struct __pyx_obj_7questdb_7_client_PooledSender *, PyObject *);
  __pyx_t_7questdb_7_client_void_int (*_wait_locked)(struct __pyx_obj_7questdb_7_client_PooledSender *, uint64_t);
  __pyx_t_7questdb_7_client_void_int (*_flush_locked)(struct __pyx_obj_7questdb_7_client_PooledSender *, int);
  void (*_release_locked)(struct __pyx_obj_7questdb_7_client_PooledSender *);
};
static struct __pyx_vtabstruct_7questdb_7_client_PooledSender *__pyx_vtabptr_7questdb_7_client_PooledSender;

 14014: cdef class PooledSender:
 14015:     """
 14016:     A row-building sender borrowed from a :class:`QuestDB` pool.
 14017: 
 14018:     Obtain a lease with :meth:`QuestDB.sender`; ``close()`` returns the
 14019:     native sender to the pool. Rows publish into an ordered,
 14020:     store-and-forward-covered QWP stream over one pooled connection.
 14021: 
 14022:     Rows go through ``row()``, ``dataframe()``, ``flush()``, ``wait()``
 14023:     and ``close()``; ``len(sender)`` is the number of buffered rows.
 14024:     Frame-level delivery tracking is available through
 14025:     :meth:`flush_and_get_fsn`, :meth:`flush_and_keep_and_get_fsn`,
 14026:     :meth:`published_fsn`, :meth:`acked_fsn` and
 14027:     :meth:`await_acked_fsn`, and per-lease server diagnostics through
 14028:     :meth:`poll_error` and :meth:`error_events_dropped`. Prefer
 14029:     :meth:`QuestDB.dataframe` for bulk loads; the lease's own
 14030:     ``dataframe()`` is a convenience that routes to the same direct
 14031:     columnar path. Row auto-flush is enabled by default at 1,000 rows, 100
 14032:     milliseconds, or a cap-derived byte threshold, and can be configured
 14033:     through the parent handle's connection settings.
 14034: 
 14035:     A lease is used by one thread at a time. It may move to another
 14036:     thread -- borrowed on one and used on a worker, say -- provided the
 14037:     hand-off is synchronized and no two threads call into it at once. To
 14038:     ingest from several threads, share the :class:`QuestDB` handle and
 14039:     borrow one lease per thread. Every method holds the lease's lock for
 14040:     its whole call, :meth:`dataframe` included, so a call from a second
 14041:     thread waits until the running one returns. Code that runs inside a
 14042:     call -- a column value's conversion, the Arrow stream
 14043:     :meth:`dataframe` reads, or a handler on the ``questdb`` logger,
 14044:     which :meth:`dataframe` logs its warnings to -- therefore must not
 14045:     wait on another thread that uses the same lease.
 14046: 
 14047:     Close every lease, or use it in a ``with`` block. A lease collected
 14048:     without ``close()`` returns its sender to the pool without sending
 14049:     the rows still buffered in it, and reports how many it discarded
 14050:     through the ``questdb`` logger at ``WARNING``.
 14051:     """
 14052:     cdef qwp_sender* _qwp
 14053:     cdef questdb_db* _db
 14054:     cdef QuestDB _handle
 14055:     cdef Buffer _buffer
 14056:     cdef object _lock
 14057:     cdef int64_t _batch_started_ms
 14058:     cdef int64_t _call_depth
 14059: 
+14060:     def __cinit__(self):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_12PooledSender_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7questdb_7_client_12PooledSender_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_12PooledSender___cinit__(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self));

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

static int __pyx_pf_7questdb_7_client_12PooledSender___cinit__(struct __pyx_obj_7questdb_7_client_PooledSender *__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.PooledSender.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+14061:         self._qwp = NULL
  __pyx_v_self->_qwp = NULL;
+14062:         self._db = NULL
  __pyx_v_self->_db = NULL;
+14063:         self._handle = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_handle);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_handle);
  __pyx_v_self->_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)Py_None);
+14064:         self._buffer = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_buffer);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_buffer);
  __pyx_v_self->_buffer = ((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None);
+14065:         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(0, 14065, __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(0, 14065, __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(0, 14065, __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;
+14066:         self._batch_started_ms = 0
  __pyx_v_self->_batch_started_ms = 0;
+14067:         self._call_depth = 0
  __pyx_v_self->_call_depth = 0;
 14068: 
+14069:     cdef void _attach(
static void __pyx_f_7questdb_7_client_12PooledSender__attach(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle, struct questdb_db *__pyx_v_db, struct qwp_sender *__pyx_v_sender, struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buffer) {
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
}
 14070:             self,
 14071:             QuestDB handle,
 14072:             questdb_db* db,
 14073:             qwp_sender* sender,
 14074:             Buffer buffer) noexcept:
+14075:         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;
+14076:         self._db = db
  __pyx_v_self->_db = __pyx_v_db;
+14077:         self._qwp = sender
  __pyx_v_self->_qwp = __pyx_v_sender;
+14078:         self._buffer = buffer
  __Pyx_INCREF((PyObject *)__pyx_v_buffer);
  __Pyx_GIVEREF((PyObject *)__pyx_v_buffer);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_buffer);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_buffer);
  __pyx_v_self->_buffer = __pyx_v_buffer;
+14079:         self._batch_started_ms = 0
  __pyx_v_self->_batch_started_ms = 0;
 14080: 
+14081:     cdef void_int _check_open(self, str method) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_12PooledSender__check_open(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, PyObject *__pyx_v_method) {
  __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_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_AddTraceback("questdb._client.PooledSender._check_open", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+14082:         if self._qwp == NULL:
  __pyx_t_1 = (__pyx_v_self->_qwp == NULL);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+14083:             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(0, 14083, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+14084:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14084, __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(0, 14084, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+14085:                 f"{method}() can't be called: Sender is closed.")
    __pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14085, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_Sender_is_close); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 14085, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_8 = 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_8 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_t_7};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__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_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14083, __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(0, 14083, __pyx_L1_error)
 14086: 
+14087:     cdef void_int _lock_enter(self, str method) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_12PooledSender__lock_enter(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, PyObject *__pyx_v_method) {
  __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_6);
  __Pyx_AddTraceback("questdb._client.PooledSender._lock_enter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 14088:         """Take this lease's lock; the caller releases it in ``finally``.
 14089: 
 14090:         Another thread may hold the lock across a native ACK wait (``wait()``,
 14091:         ``flush(wait=True)``, ``await_acked_fsn()``, ``close(wait=True)``)
 14092:         whose reconnect needs a token. An OIDC provider cannot supply one
 14093:         until its persistence-warning or renderer callback returns, and a
 14094:         ``bearer_token_provider=`` call on a native reconnect thread is that
 14095:         token request itself, so a callback that blocked here would never
 14096:         return and both threads would hang. From inside such a callback, wait
 14097:         a bounded time and then raise instead, as ``QuestDB.close()`` does.
 14098:         """
 14099:         # Uncontended (or re-entrant) is the per-row common case: one call.
+14100:         if self._lock.acquire(False):
  __pyx_t_2 = __pyx_v_self->_lock;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, Py_False};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_acquire, __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(0, 14100, __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(0, 14100, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_4) {
/* … */
  }
+14101:             return 0
    __pyx_r = 0;
    goto __pyx_L0;
+14102:         if not _in_bounded_wait_callback():
  __pyx_t_4 = __pyx_f_7questdb_7_client__in_bounded_wait_callback(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 14102, __pyx_L1_error)
  __pyx_t_5 = (!__pyx_t_4);
  if (__pyx_t_5) {
/* … */
  }
+14103:             self._lock.acquire()
    __pyx_t_2 = __pyx_v_self->_lock;
    __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_acquire, __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(0, 14103, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+14104:             return 0
    __pyx_r = 0;
    goto __pyx_L0;
+14105:         if self._lock.acquire(True, _OIDC_CLOSE_DIAGNOSTIC_WAIT_SECS):
  __pyx_t_2 = __pyx_v_self->_lock;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_6 = PyFloat_FromDouble(__pyx_v_7questdb_7_client__OIDC_CLOSE_DIAGNOSTIC_WAIT_SECS); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14105, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, Py_True, __pyx_t_6};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_acquire, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 14105, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 14105, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_5) {
/* … */
  }
+14106:             return 0
    __pyx_r = 0;
    goto __pyx_L0;
+14107:         raise _callback_wait_refused(
  __pyx_t_2 = __pyx_f_7questdb_7_client__callback_wait_refused(((PyObject*)__pyx_t_6)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14107, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_Raise(__pyx_t_2, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __PYX_ERR(0, 14107, __pyx_L1_error)
+14108:             f'{method}() cannot wait for this sender lease inside '
  __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 14108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
/* … */
  __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_7, 4, __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1) + 44 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2) + 132, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2));
  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+14109:             f'{_bounded_wait_callback_name()}: another thread is using the '
  __pyx_t_6 = __pyx_f_7questdb_7_client__bounded_wait_callback_name(); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14109, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_2 = __Pyx_PyUnicode_Unicode(__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14109, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_7[0] = __pyx_t_1;
  __pyx_t_7[1] = __pyx_mstate_global->__pyx_kp_u_cannot_wait_for_this_sender_lea;
  __pyx_t_7[2] = __pyx_t_2;
  __pyx_t_7[3] = __pyx_mstate_global->__pyx_kp_u_another_thread_is_using_the_lea;
 14110:             'lease and may be waiting for this callback to return. Return '
 14111:             'from the callback before using the lease.')
 14112: 
+14113:     cdef void_int _check_not_in_row(self, str method) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_12PooledSender__check_not_in_row(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, PyObject *__pyx_v_method) {
  __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_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_AddTraceback("questdb._client.PooledSender._check_not_in_row", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 14114:         """
 14115:         Refuse a call that arrives while `row()` is part-way through
 14116:         assembling a row on this lease's buffer.
 14117: 
 14118:         A column value whose conversion runs Python code re-enters here on
 14119:         the same thread, and `self._lock` is re-entrant, so the lock alone
 14120:         lets it through. Flushing a half-written row cannot succeed, and
 14121:         returning the lease to the pool would free the buffer the row is
 14122:         still writing into.
 14123:         """
+14124:         if self._buffer is not None and self._buffer._row_depth != 0:
  __pyx_t_2 = (((PyObject *)__pyx_v_self->_buffer) != Py_None);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_self->_buffer->_row_depth != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+14125:             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(0, 14125, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
+14126:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14126, __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(0, 14126, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+14127:                 f"{method}() can't be called while a row is being "
    __pyx_t_6 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14127, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_8 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_while_a_row_is_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 14127, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __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_7, __pyx_t_8};
      __pyx_t_3 = __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_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14125, __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(0, 14125, __pyx_L1_error)
 14128:                 "written. `row()` is part-way through assembling a row "
 14129:                 "and something it called has come back into this sender, "
 14130:                 "most likely a column value whose conversion runs Python "
 14131:                 "code.")
 14132: 
+14133:     cdef QuestDB _enter_call_locked(self):
static struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_f_7questdb_7_client_12PooledSender__enter_call_locked(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self) {
  struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0;
  struct __pyx_obj_7questdb_7_client_QuestDB *__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_AddTraceback("questdb._client.PooledSender._enter_call_locked", __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;
}
 14134:         """Count one of this lease's own calls, on the lease and on the
 14135:         handle it was borrowed from. Called with `self._lock` held.
 14136: 
 14137:         Every public method that writes, flushes, waits or closes counts,
 14138:         whether or not it looks like it runs the caller's Python: the list
 14139:         of methods that do has been wrong once per review round, and a
 14140:         counter raised on all of them cannot be short one entry. The six
 14141:         that only read state -- `__enter__`, `__len__`, `poll_error()`,
 14142:         `error_events_dropped()`, `published_fsn()` and `acked_fsn()` --
 14143:         run none of the caller's Python and do not count. The returned
 14144:         handle is the one to pass back to `_exit_call_locked`, because the
 14145:         lease drops its own reference when it is released.
 14146: 
 14147:         The two counts answer different questions. The handle's is
 14148:         per-thread and shared by every lease and call on that handle, so
 14149:         `QuestDB.close()` can see that the frame it would wait for is its
 14150:         own caller. The lease's own is per-lease, so `close()` can refuse
 14151:         to return the sender to the pool from inside a call still using
 14152:         it without refusing to close some unrelated lease.
 14153:         """
+14154:         cdef QuestDB handle = self._handle
  __pyx_t_1 = ((PyObject *)__pyx_v_self->_handle);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_1);
  __pyx_t_1 = 0;
+14155:         self._call_depth += 1
  __pyx_v_self->_call_depth = (__pyx_v_self->_call_depth + 1);
+14156:         if handle is not None:
  __pyx_t_2 = (((PyObject *)__pyx_v_handle) != Py_None);
  if (__pyx_t_2) {
/* … */
  }
+14157:             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_L9_try_end;
      __pyx_L4_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
      __pyx_L6_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_L9_try_end:;
    }
+14158:                 handle._enter_scoped_call()
        ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_handle->__pyx_vtab)->_enter_scoped_call(__pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14158, __pyx_L4_error)
+14159:             except:
      /*except:*/ {
        __Pyx_AddTraceback("questdb._client.PooledSender._enter_call_locked", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(0, 14159, __pyx_L6_except_error)
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_7);
+14160:                 self._call_depth -= 1
        __pyx_v_self->_call_depth = (__pyx_v_self->_call_depth - 1);
+14161:                 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(0, 14161, __pyx_L6_except_error)
      }
+14162:         return handle
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_handle);
  __pyx_r = __pyx_v_handle;
  goto __pyx_L0;
 14163: 
+14164:     cdef void _exit_call_locked(self, QuestDB handle) except *:
static void __pyx_f_7questdb_7_client_12PooledSender__exit_call_locked(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle) {
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client.PooledSender._exit_call_locked", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
}
 14165:         # The handle's thread-local update can raise; this lease is no longer
 14166:         # in its call either way, so unwind its guard first.
+14167:         self._call_depth -= 1
  __pyx_v_self->_call_depth = (__pyx_v_self->_call_depth - 1);
+14168:         if handle is not None:
  __pyx_t_1 = (((PyObject *)__pyx_v_handle) != Py_None);
  if (__pyx_t_1) {
/* … */
  }
+14169:             handle._exit_scoped_call()
    ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_handle->__pyx_vtab)->_exit_scoped_call(__pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14169, __pyx_L1_error)
 14170: 
+14171:     cdef void_int _check_not_mid_call(self, str method) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_12PooledSender__check_not_mid_call(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, PyObject *__pyx_v_method) {
  __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_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_AddTraceback("questdb._client.PooledSender._check_not_mid_call", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 14172:         """
 14173:         Refuse a call that would end this lease while one of its own
 14174:         calls is still running.
 14175: 
 14176:         `dataframe()` runs the caller's Python for the whole plan build --
 14177:         reading `attrs`, sniffing object cells, pulling
 14178:         `__arrow_c_stream__` -- and `row()` runs it for every column
 14179:         value whose conversion is not pure C. That code can come back
 14180:         here. Returning the sender to the pool from inside it leaves the
 14181:         rest of the call working against a lease that is already closed,
 14182:         so every later use in the enclosing block raises.
 14183:         """
+14184:         if self._call_depth != 0:
  __pyx_t_1 = (__pyx_v_self->_call_depth != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+14185:             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(0, 14185, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+14186:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14186, __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(0, 14186, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+14187:                 f"{method}() can't be called from inside a call on this "
    __pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14187, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_from_inside_a_c); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 14187, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_8 = 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_8 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_t_7};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__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_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14185, __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(0, 14185, __pyx_L1_error)
 14188:                 'sender lease. It would return the sender to the pool '
 14189:                 'while that call is still using it. Close the lease '
 14190:                 'after the call returns.')
 14191: 
+14192:     cdef void_int _wait_locked(self, uint64_t timeout_millis) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_12PooledSender__wait_locked(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, uint64_t __pyx_v_timeout_millis) {
  struct line_sender_error *__pyx_v_err;
  PyThreadState *__pyx_v_gs;
  int __pyx_v_ok;
  __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_2);
  __Pyx_AddTraceback("questdb._client.PooledSender._wait_locked", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+14193:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+14194:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+14195:         cdef bint ok = False
  __pyx_v_ok = 0;
+14196:         _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+14197:         ok = qwp_sender_wait(
  __pyx_v_ok = qwp_sender_wait(__pyx_v_self->_qwp, qwpws_ack_level_ok, __pyx_v_timeout_millis, (&__pyx_v_err));
 14198:             self._qwp,
 14199:             qwpws_ack_level.qwpws_ack_level_ok,
 14200:             timeout_millis,
 14201:             &err)
+14202:         _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+14203:         if not ok:
  __pyx_t_1 = (!__pyx_v_ok);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+14204:             raise c_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14204, __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(0, 14204, __pyx_L1_error)
 14205: 
+14206:     cdef void_int _flush_locked(self, bint wait) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_12PooledSender__flush_locked(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, int __pyx_v_wait) {
  struct line_sender_error *__pyx_v_err;
  PyThreadState *__pyx_v_gs;
  int __pyx_v_ok;
  __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_3);
  __Pyx_AddTraceback("questdb._client.PooledSender._flush_locked", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+14207:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+14208:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+14209:         cdef bint ok = False
  __pyx_v_ok = 0;
+14210:         self._check_open('flush')
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14210, __pyx_L1_error)
+14211:         self._check_not_in_row('flush')
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_not_in_row(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14211, __pyx_L1_error)
+14212:         if line_sender_buffer_row_count(self._buffer._impl) == 0:
  __pyx_t_2 = (line_sender_buffer_row_count(__pyx_v_self->_buffer->_impl) == 0);
  if (__pyx_t_2) {
/* … */
  }
+14213:             self._batch_started_ms = 0
    __pyx_v_self->_batch_started_ms = 0;
+14214:             if wait:
    if (__pyx_v_wait) {
/* … */
    }
+14215:                 self._wait_locked(0)
      __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_wait_locked(__pyx_v_self, 0); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14215, __pyx_L1_error)
+14216:             return 0
    __pyx_r = 0;
    goto __pyx_L0;
+14217:         _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+14218:         if wait:
  if (__pyx_v_wait) {
/* … */
    goto __pyx_L5;
  }
+14219:             ok = qwp_sender_flush_buffer_and_wait(
    __pyx_v_ok = qwp_sender_flush_buffer_and_wait(__pyx_v_self->_qwp, __pyx_v_self->_buffer->_impl, qwpws_ack_level_ok, (&__pyx_v_err));
 14220:                 self._qwp,
 14221:                 self._buffer._impl,
 14222:                 qwpws_ack_level.qwpws_ack_level_ok,
 14223:                 &err)
 14224:         else:
+14225:             ok = qwp_sender_flush_buffer(
  /*else*/ {
/* … */
    __pyx_v_ok = qwp_sender_flush_buffer(__pyx_v_self->_qwp, __pyx_v_self->_buffer->_impl, (&__pyx_v_err));
  }
  __pyx_L5:;
 14226:                 self._qwp, self._buffer._impl, &err)
+14227:         _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+14228:         if not ok:
  __pyx_t_2 = (!__pyx_v_ok);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+14229:             raise c_err_to_py(err)
    __pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14229, __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(0, 14229, __pyx_L1_error)
+14230:         qdb_pystr_buf_clear(self._buffer._b)
  qdb_pystr_buf_clear(__pyx_v_self->_buffer->_b);
+14231:         self._batch_started_ms = 0
  __pyx_v_self->_batch_started_ms = 0;
 14232: 
+14233:     cdef void _release_locked(self) except *:
static void __pyx_f_7questdb_7_client_12PooledSender__release_locked(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self) {
  struct qwp_sender *__pyx_v_sender;
  struct questdb_db *__pyx_v_db;
  struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0;
  PyThreadState *__pyx_v_gs;
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client.PooledSender._release_locked", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_handle);
  __Pyx_RefNannyFinishContext();
}
 14234:         """Hand the borrowed sender back to the pool.
 14235: 
 14236:         Every refusal belongs to `close()`, which runs them before it
 14237:         reaches here. This is also the `__dealloc__` path, where the
 14238:         function is `except *` and cannot report anything: a raise here
 14239:         would skip `questdb_db_return_sender` below, leaving the pool a
 14240:         sender short and `QuestDB.close()` waiting on a lease that can
 14241:         never come back. `PooledReader._release_locked` is the same
 14242:         shape.
 14243:         """
+14244:         cdef qwp_sender* sender = self._qwp
  __pyx_t_1 = __pyx_v_self->_qwp;
  __pyx_v_sender = __pyx_t_1;
+14245:         cdef questdb_db* db = self._db
  __pyx_t_2 = __pyx_v_self->_db;
  __pyx_v_db = __pyx_t_2;
+14246:         cdef QuestDB handle = self._handle
  __pyx_t_3 = ((PyObject *)__pyx_v_self->_handle);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_3);
  __pyx_t_3 = 0;
+14247:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+14248:         if sender == NULL:
  __pyx_t_4 = (__pyx_v_sender == NULL);
  if (__pyx_t_4) {
/* … */
  }
+14249:             return
    goto __pyx_L0;
+14250:         self._qwp = NULL
  __pyx_v_self->_qwp = NULL;
+14251:         self._db = NULL
  __pyx_v_self->_db = NULL;
+14252:         self._buffer = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_buffer);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_buffer);
  __pyx_v_self->_buffer = ((struct __pyx_obj_7questdb_7_client_Buffer *)Py_None);
+14253:         self._handle = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_handle);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_handle);
  __pyx_v_self->_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)Py_None);
+14254:         _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+14255:         questdb_db_return_sender(db, sender)
  questdb_db_return_sender(__pyx_v_db, __pyx_v_sender);
+14256:         _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+14257:         if handle is not None:
  __pyx_t_4 = (((PyObject *)__pyx_v_handle) != Py_None);
  if (__pyx_t_4) {
/* … */
  }
+14258:             handle._end_db_use(scoped=False)
    __pyx_t_5.__pyx_n = 1;
    __pyx_t_5.scoped = 0;
    ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_handle->__pyx_vtab)->_end_db_use(__pyx_v_handle, &__pyx_t_5); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14258, __pyx_L1_error)
 14259: 
+14260:     def __enter__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_3__enter__(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_12PooledSender_3__enter__ = {"__enter__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledSender_3__enter__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_3__enter__(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
) {
  #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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__enter__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__enter__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_2__enter__(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_12PooledSender_2__enter__(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client.PooledSender.__enter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_3__enter__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender___enter, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[249])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 14260, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_enter, __pyx_t_17) < (0)) __PYX_ERR(0, 14260, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+14261:         self._lock_enter('__enter__')
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_lock_enter(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14261, __pyx_L1_error)
+14262:         try:
  /*try:*/ {
+14263:             self._check_open('__enter__')
    __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14263, __pyx_L4_error)
  }
 14264:         finally:
+14265:             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(0, 14265, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
      if ( unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __pyx_t_5 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_7 = __pyx_filename;
      {
        __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(0, 14265, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_ErrRestore(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      __pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_7;
      goto __pyx_L1_error;
      __pyx_L7_error:;
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      __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;
      __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }
+14266:         return self
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;
 14267: 
+14268:     def row(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_5row(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledSender_4row, "\n        Append one row to this sender's QWP buffer.\n\n        When pooled auto-flush is enabled on the :class:`QuestDB` handle,\n        completing a row that breaches a configured row, byte, or interval\n        threshold publishes the buffer without waiting for an acknowledgement.\n        A buffer whose size estimate reaches the connection's frame cap is\n        published too, even with ``auto_flush_bytes=off``. Every published\n        frame fits the frame cap: when the whole buffer does not, or its\n        size estimate is past the cap, the rows buffered before this one go\n        out as a frame of their own and this row starts the next batch, so\n        one call publishes at most two frames. Re-adding the row converts its\n        values a second time.\n\n        Whatever this method raises, the row was not added.\n        :class:`QuestDBErrorCode.BatchTooLarge` means either it does not fit\n        in a frame on its own, or the rows buffered before it do not fit\n        even without it, which can happen after the frame cap shrinks, for\n        example on reconnect; those rows are then discarded, and the error\n        says how many. Any other error raised by a publish propagates from\n        this method and leaves the rows buffered before it in place.\n\n        See :func:`Buffer.row <questdb.ingress.Buffer.row>` for supported\n        column types, protocol restrictions, server requirements, and\n        ``NULL``-sentinel behavior.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledSender_5row = {"row", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledSender_5row, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledSender_4row};
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_5row(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_table_name = 0;
  PyObject *__pyx_v_symbols = 0;
  PyObject *__pyx_v_columns = 0;
  PyObject *__pyx_v_at = 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 (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_table_name,&__pyx_mstate_global->__pyx_n_u_at,&__pyx_mstate_global->__pyx_n_u_symbols,&__pyx_mstate_global->__pyx_n_u_columns,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(0, 14268, __pyx_L3_error)
    if (likely(__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(0, 14268, __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", 0) < (0)) __PYX_ERR(0, 14268, __pyx_L3_error)
/* … */
  /* 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_12PooledSender_4row(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, PyObject *__pyx_v_table_name, PyObject *__pyx_v_symbols, PyObject *__pyx_v_columns, PyObject *__pyx_v_at) {
  struct __pyx_obj_7questdb_7_client_Buffer *__pyx_v_buf = 0;
  struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 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.PooledSender.row", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_buf);
  __Pyx_XDECREF((PyObject *)__pyx_v_handle);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 14268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
/* … */
  __pyx_t_4 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_table_name, __pyx_mstate_global->__pyx_n_u_str_2) < (0)) __PYX_ERR(0, 14268, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_Optional_str) < (0)) __PYX_ERR(0, 14268, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_columns, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_Union_None_boo_2) < (0)) __PYX_ERR(0, 14268, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_at, __pyx_mstate_global->__pyx_kp_u_Union_ServerTimestampType_Timest) < (0)) __PYX_ERR(0, 14268, __pyx_L1_error)
  __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_5row, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_row, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[250])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 14268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25);
  #endif
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_25, __pyx_t_17);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_25, __pyx_t_4);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_row_2, __pyx_t_25) < (0)) __PYX_ERR(0, 14268, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 14269:             self,
 14270:             table_name: str,
 14271:             *,
+14272:             symbols: Optional[Dict[str, Optional[str]]] = None,
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_symbols, Py_None) < (0)) __PYX_ERR(0, 14268, __pyx_L1_error)
 14273:             columns: Optional[Dict[
 14274:                 str,
 14275:                 Union[None, bool, int, float, str, TimestampMicros,
 14276:                       TimestampNanos, datetime.datetime, numpy.ndarray,
 14277:                       Decimal, uuid.UUID, ipaddress.IPv4Address, bytes,
 14278:                       bytearray, memoryview, Char, DateMillis, Long256,
+14279:                       Geohash]]] = None,
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("row", 1, 1, 1, i); __PYX_ERR(0, 14268, __pyx_L3_error) }
      }
      for (Py_ssize_t i = 1; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseKeywordRequired("row", *(__pyx_pyargnames[i - 0])); __PYX_ERR(0, 14268, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      __Pyx_RaiseKeywordRequired("row", __pyx_mstate_global->__pyx_n_u_at); __PYX_ERR(0, 14268, __pyx_L3_error)
    }
    __pyx_v_table_name = ((PyObject*)values[0]);
    __pyx_v_at = values[1];
    __pyx_v_symbols = ((PyObject*)values[2]);
    __pyx_v_columns = ((PyObject*)values[3]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("row", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 14268, __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.PooledSender.row", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_table_name), (&PyUnicode_Type), 0, "table_name", 2))) __PYX_ERR(0, 14270, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_symbols), (&PyDict_Type), 1, "symbols", 2))) __PYX_ERR(0, 14272, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_columns), (&PyDict_Type), 1, "columns", 2))) __PYX_ERR(0, 14273, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_4row(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self), __pyx_v_table_name, __pyx_v_symbols, __pyx_v_columns, __pyx_v_at);
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_columns, Py_None) < (0)) __PYX_ERR(0, 14268, __pyx_L1_error)
 14280:             at: Union[ServerTimestampType, TimestampNanos,
 14281:                       datetime.datetime]):
 14282:         """
 14283:         Append one row to this sender's QWP buffer.
 14284: 
 14285:         When pooled auto-flush is enabled on the :class:`QuestDB` handle,
 14286:         completing a row that breaches a configured row, byte, or interval
 14287:         threshold publishes the buffer without waiting for an acknowledgement.
 14288:         A buffer whose size estimate reaches the connection's frame cap is
 14289:         published too, even with ``auto_flush_bytes=off``. Every published
 14290:         frame fits the frame cap: when the whole buffer does not, or its
 14291:         size estimate is past the cap, the rows buffered before this one go
 14292:         out as a frame of their own and this row starts the next batch, so
 14293:         one call publishes at most two frames. Re-adding the row converts its
 14294:         values a second time.
 14295: 
 14296:         Whatever this method raises, the row was not added.
 14297:         :class:`QuestDBErrorCode.BatchTooLarge` means either it does not fit
 14298:         in a frame on its own, or the rows buffered before it do not fit
 14299:         even without it, which can happen after the frame cap shrinks, for
 14300:         example on reconnect; those rows are then discarded, and the error
 14301:         says how many. Any other error raised by a publish propagates from
 14302:         this method and leaves the rows buffered before it in place.
 14303: 
 14304:         See :func:`Buffer.row <questdb.ingress.Buffer.row>` for supported
 14305:         column types, protocol restrictions, server requirements, and
 14306:         ``NULL``-sentinel behavior.
 14307:         """
 14308:         cdef Buffer buf
 14309:         cdef QuestDB handle
+14310:         if at is None:
  __pyx_t_1 = (__pyx_v_at == Py_None);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+14311:             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(0, 14311, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+14312:                 QuestDBErrorCode.InvalidTimestamp,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14312, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14312, __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_at_must_be_of_type_TimestampNan};
      __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(0, 14311, __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(0, 14311, __pyx_L1_error)
 14313:                 "`at` must be of type TimestampNanos, datetime, or "
 14314:                 "ServerTimestamp")
+14315:         self._lock_enter('row')
  __pyx_t_8 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_lock_enter(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_row_2); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14315, __pyx_L1_error)
+14316:         try:
  /*try:*/ {
+14317:             self._check_open('row')
    __pyx_t_8 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_row_2); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14317, __pyx_L5_error)
+14318:             handle = self._enter_call_locked()
    __pyx_t_2 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14318, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_2);
    __pyx_t_2 = 0;
+14319:             try:
    /*try:*/ {
 14320:                 # The lease holds the only reference to the buffer, and a
 14321:                 # column value whose conversion runs Python code can reach
 14322:                 # back in here. A strong local reference keeps the buffer
 14323:                 # alive for the whole row, including its cleanup.
+14324:                 buf = self._buffer
      __pyx_t_2 = ((PyObject *)__pyx_v_self->_buffer);
      __Pyx_INCREF(__pyx_t_2);
      __pyx_v_buf = ((struct __pyx_obj_7questdb_7_client_Buffer *)__pyx_t_2);
      __pyx_t_2 = 0;
+14325:                 _qwp_row_append(
      __pyx_t_8 = __pyx_f_7questdb_7_client__qwp_row_append(((struct __pyx_obj_7questdb_7_client_Sender *)Py_None), __pyx_v_self, __pyx_v_buf, __pyx_v_table_name, __pyx_v_symbols, __pyx_v_columns, __pyx_v_at); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14325, __pyx_L8_error)
    }
 14326:                     None, self, buf, table_name, symbols, columns, at)
 14327:             finally:
+14328:                 self._exit_call_locked(handle)
    /*finally:*/ {
      /*normal exit:*/{
        ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14328, __pyx_L5_error)
        goto __pyx_L9;
      }
      __pyx_L8_error:;
      /*exception exit:*/{
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 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_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
         __Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
        if ( unlikely(__Pyx_GetException(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14) < 0)) __Pyx_ErrFetch(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
        __Pyx_XGOTREF(__pyx_t_12);
        __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_t_9 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_11 = __pyx_filename;
        {
          ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14328, __pyx_L11_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);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_ErrRestore(__pyx_t_12, __pyx_t_13, __pyx_t_14);
        __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
        __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_11;
        goto __pyx_L5_error;
        __pyx_L11_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);
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
        goto __pyx_L5_error;
      }
      __pyx_L9:;
    }
  }
 14329:         finally:
+14330:             self._lock.release()
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_4 = __pyx_v_self->_lock;
      __Pyx_INCREF(__pyx_t_4);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
        __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14330, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      goto __pyx_L6;
    }
    __pyx_L5_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0; __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_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_14, &__pyx_t_13, &__pyx_t_12);
      if ( unlikely(__Pyx_GetException(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15) < 0)) __Pyx_ErrFetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15);
      __Pyx_XGOTREF(__pyx_t_17);
      __Pyx_XGOTREF(__pyx_t_16);
      __Pyx_XGOTREF(__pyx_t_15);
      __Pyx_XGOTREF(__pyx_t_14);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_12);
      __pyx_t_10 = __pyx_lineno; __pyx_t_9 = __pyx_clineno; __pyx_t_18 = __pyx_filename;
      {
        __pyx_t_4 = __pyx_v_self->_lock;
        __Pyx_INCREF(__pyx_t_4);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
          __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14330, __pyx_L13_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      __Pyx_XGIVEREF(__pyx_t_14);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_ExceptionReset(__pyx_t_14, __pyx_t_13, __pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_17);
      __Pyx_XGIVEREF(__pyx_t_16);
      __Pyx_XGIVEREF(__pyx_t_15);
      __Pyx_ErrRestore(__pyx_t_17, __pyx_t_16, __pyx_t_15);
      __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0;
      __pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_9; __pyx_filename = __pyx_t_18;
      goto __pyx_L1_error;
      __pyx_L13_error:;
      __Pyx_XGIVEREF(__pyx_t_14);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_ExceptionReset(__pyx_t_14, __pyx_t_13, __pyx_t_12);
      __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L6:;
  }
+14331:         return self
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;
 14332: 
+14333:     def dataframe(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_7dataframe(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledSender_6dataframe, "\n        Bulk-load a whole DataFrame over a direct columnar connection\n        borrowed from the pool for the duration of this call.\n\n        Prefer :meth:`QuestDB.dataframe` \342\200\224 this convenience forwards to the\n        same path and is **not** part of this sender's row stream: the frame\n        is committed over its own connection and becomes visible to SQL\n        immediately, without waiting for rows appended to this sender with\n        :meth:`row` to drain. There is therefore **no ordering relationship**\n        between ``dataframe()`` and buffered rows \342\200\224 ``dataframe()`` does not\n        flush them; publish those with :meth:`flush`.\n\n        Being the handle's own path, it is refused once\n        :meth:`QuestDB.close` has started, as :meth:`QuestDB.dataframe`\n        is, even though this lease's other methods keep working until\n        it is closed. A load already running when ``close()`` starts\n        finishes.\n\n        Arguments mirror :meth:`QuestDB.dataframe`.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledSender_7dataframe = {"dataframe", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledSender_7dataframe, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledSender_6dataframe};
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_7dataframe(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_df = 0;
  PyObject *__pyx_v_table_name = 0;
  PyObject *__pyx_v_table_name_col = 0;
  PyObject *__pyx_v_symbols = 0;
  PyObject *__pyx_v_at = 0;
  PyObject *__pyx_v_max_rows_per_batch = 0;
  PyObject *__pyx_v_schema_overrides = 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("dataframe (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_df_2,&__pyx_mstate_global->__pyx_n_u_at,&__pyx_mstate_global->__pyx_n_u_table_name,&__pyx_mstate_global->__pyx_n_u_table_name_col,&__pyx_mstate_global->__pyx_n_u_symbols,&__pyx_mstate_global->__pyx_n_u_max_rows_per_batch,&__pyx_mstate_global->__pyx_n_u_schema_overrides_2,0};
  PyObject* values[7] = {0,0,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(0, 14333, __pyx_L3_error)
    if (likely(__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(0, 14333, __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, "dataframe", 0) < (0)) __PYX_ERR(0, 14333, __pyx_L3_error)
/* … */
  /* 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_12PooledSender_6dataframe(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, PyObject *__pyx_v_df, PyObject *__pyx_v_table_name, PyObject *__pyx_v_table_name_col, PyObject *__pyx_v_symbols, PyObject *__pyx_v_at, PyObject *__pyx_v_max_rows_per_batch, PyObject *__pyx_v_schema_overrides) {
  struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 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_5);
  __Pyx_AddTraceback("questdb._client.PooledSender.dataframe", __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_25 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 14333, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
/* … */
  __pyx_t_4 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14333, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_table_name, __pyx_mstate_global->__pyx_kp_u_Optional_str) < (0)) __PYX_ERR(0, 14333, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_table_name_col, __pyx_mstate_global->__pyx_kp_u_Union_None_int_str) < (0)) __PYX_ERR(0, 14333, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_kp_u_Union_str_bool_List_int_List_str) < (0)) __PYX_ERR(0, 14333, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_at, __pyx_mstate_global->__pyx_kp_u_Union_ServerTimestampType_int_st) < (0)) __PYX_ERR(0, 14333, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_max_rows_per_batch, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 14333, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_schema_overrides_2, __pyx_mstate_global->__pyx_kp_u_Optional_Dict_str_object) < (0)) __PYX_ERR(0, 14333, __pyx_L1_error)
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_7dataframe, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_dataframe, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[251])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 14333, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_17, __pyx_t_25);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_17, __pyx_t_4);
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_dataframe, __pyx_t_17) < (0)) __PYX_ERR(0, 14333, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 14334:             self,
 14335:             df,
 14336:             *,
+14337:             table_name: Optional[str] = None,
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None));
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_table_name, Py_None) < (0)) __PYX_ERR(0, 14333, __pyx_L1_error)
+14338:             table_name_col: Union[None, int, str] = None,
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_n_u_auto));
      if (!values[5]) values[5] = __Pyx_NewRef(__pyx_mstate_global->__pyx_k__41);
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_table_name_col, Py_None) < (0)) __PYX_ERR(0, 14333, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_symbols, __pyx_mstate_global->__pyx_n_u_auto) < (0)) __PYX_ERR(0, 14333, __pyx_L1_error)
 14339:             symbols: Union[str, bool, List[int], List[str]] = 'auto',
 14340:             at: Union[ServerTimestampType, int, str, TimestampNanos,
 14341:                       datetime.datetime],
+14342:             max_rows_per_batch: int = DEFAULT_MAX_CHUNK_ROWS,
  __Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_DEFAULT_MAX_CHUNK_ROWS); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 14342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  if (__Pyx_PyInt_FromNumber(&__pyx_t_25, NULL, 1) < (0)) __PYX_ERR(0, 14342, __pyx_L1_error)
  __pyx_mstate_global->__pyx_k__41 = ((PyObject*)__pyx_t_25);
  __Pyx_GIVEREF(__pyx_t_25);
  __pyx_t_25 = 0;
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_DEFAULT_MAX_CHUNK_ROWS); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_PyInt_FromNumber(&__pyx_t_4, NULL, 1) < (0)) __PYX_ERR(0, 14342, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_max_rows_per_batch, __pyx_t_4) < (0)) __PYX_ERR(0, 14333, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+14343:             schema_overrides: Optional[Dict[str, object]] = None):
      if (!values[6]) values[6] = __Pyx_NewRef(((PyObject*)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("dataframe", 1, 1, 1, i); __PYX_ERR(0, 14333, __pyx_L3_error) }
      }
      for (Py_ssize_t i = 1; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseKeywordRequired("dataframe", *(__pyx_pyargnames[i - 0])); __PYX_ERR(0, 14333, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      __Pyx_RaiseKeywordRequired("dataframe", __pyx_mstate_global->__pyx_n_u_at); __PYX_ERR(0, 14333, __pyx_L3_error)
    }
    __pyx_v_df = values[0];
    __pyx_v_at = values[1];
    __pyx_v_table_name = ((PyObject*)values[2]);
    __pyx_v_table_name_col = values[3];
    __pyx_v_symbols = values[4];
    if (__Pyx_PyInt_FromNumber(&values[5], "max_rows_per_batch", 0) < (0)) __PYX_ERR(0, 14342, __pyx_L3_error)
    __pyx_v_max_rows_per_batch = ((PyObject*)values[5]);
    __pyx_v_schema_overrides = ((PyObject*)values[6]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("dataframe", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 14333, __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.PooledSender.dataframe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_table_name), (&PyUnicode_Type), 1, "table_name", 2))) __PYX_ERR(0, 14337, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_max_rows_per_batch), (&PyLong_Type), 0, "max_rows_per_batch", 2))) __PYX_ERR(0, 14342, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema_overrides), (&PyDict_Type), 1, "schema_overrides", 2))) __PYX_ERR(0, 14343, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_6dataframe(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self), __pyx_v_df, __pyx_v_table_name, __pyx_v_table_name_col, __pyx_v_symbols, __pyx_v_at, __pyx_v_max_rows_per_batch, __pyx_v_schema_overrides);
/* … */
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_schema_overrides_2, Py_None) < (0)) __PYX_ERR(0, 14333, __pyx_L1_error)
 14344:         """
 14345:         Bulk-load a whole DataFrame over a direct columnar connection
 14346:         borrowed from the pool for the duration of this call.
 14347: 
 14348:         Prefer :meth:`QuestDB.dataframe` — this convenience forwards to the
 14349:         same path and is **not** part of this sender's row stream: the frame
 14350:         is committed over its own connection and becomes visible to SQL
 14351:         immediately, without waiting for rows appended to this sender with
 14352:         :meth:`row` to drain. There is therefore **no ordering relationship**
 14353:         between ``dataframe()`` and buffered rows — ``dataframe()`` does not
 14354:         flush them; publish those with :meth:`flush`.
 14355: 
 14356:         Being the handle's own path, it is refused once
 14357:         :meth:`QuestDB.close` has started, as :meth:`QuestDB.dataframe`
 14358:         is, even though this lease's other methods keep working until
 14359:         it is closed. A load already running when ``close()`` starts
 14360:         finishes.
 14361: 
 14362:         Arguments mirror :meth:`QuestDB.dataframe`.
 14363:         """
 14364:         cdef QuestDB handle
+14365:         self._lock_enter('dataframe')
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_lock_enter(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_dataframe); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14365, __pyx_L1_error)
+14366:         try:
  /*try:*/ {
+14367:             self._check_open('dataframe')
    __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_dataframe); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14367, __pyx_L4_error)
+14368:             self._check_not_in_row('dataframe')
    __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_not_in_row(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_dataframe); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14368, __pyx_L4_error)
+14369:             handle = self._enter_call_locked()
    __pyx_t_2 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14369, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_2);
    __pyx_t_2 = 0;
 14370:             # The lock is held for the whole load, as in every method of a
 14371:             # lease, which one thread uses at a time. That keeps the call
 14372:             # count visible only to the thread running the call: a
 14373:             # `close()` from the caller's own Python mid-plan is refused as
 14374:             # re-entry, and one from another thread waits for the load.
+14375:             try:
    /*try:*/ {
+14376:                 handle.dataframe(
      __pyx_t_3 = ((PyObject *)__pyx_v_handle);
      __Pyx_INCREF(__pyx_t_3);
 14377:                     df,
 14378:                     table_name=table_name,
 14379:                     table_name_col=table_name_col,
 14380:                     symbols=symbols,
 14381:                     at=at,
 14382:                     max_rows_per_batch=max_rows_per_batch,
+14383:                     schema_overrides=schema_overrides)
      __pyx_t_4 = 0;
      {
        PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 6 : 0)] = {__pyx_t_3, __pyx_v_df};
        __pyx_t_5 = __Pyx_MakeVectorcallBuilderKwds(6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14376, __pyx_L7_error)
        __Pyx_GOTREF(__pyx_t_5);
        if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_table_name, __pyx_v_table_name, __pyx_t_5, __pyx_callargs+2, 0) < (0)) __PYX_ERR(0, 14376, __pyx_L7_error)
        if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_table_name_col, __pyx_v_table_name_col, __pyx_t_5, __pyx_callargs+2, 1) < (0)) __PYX_ERR(0, 14376, __pyx_L7_error)
        if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_symbols, __pyx_v_symbols, __pyx_t_5, __pyx_callargs+2, 2) < (0)) __PYX_ERR(0, 14376, __pyx_L7_error)
        if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_at, __pyx_v_at, __pyx_t_5, __pyx_callargs+2, 3) < (0)) __PYX_ERR(0, 14376, __pyx_L7_error)
        if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_max_rows_per_batch, __pyx_v_max_rows_per_batch, __pyx_t_5, __pyx_callargs+2, 4) < (0)) __PYX_ERR(0, 14376, __pyx_L7_error)
        if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_schema_overrides_2, __pyx_v_schema_overrides, __pyx_t_5, __pyx_callargs+2, 5) < (0)) __PYX_ERR(0, 14376, __pyx_L7_error)
        __pyx_t_2 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_dataframe, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_5);
        __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(0, 14376, __pyx_L7_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
 14384:             finally:
+14385:                 self._exit_call_locked(handle)
    /*finally:*/ {
      /*normal exit:*/{
        ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14385, __pyx_L4_error)
        goto __pyx_L8;
      }
      __pyx_L7_error:;
      /*exception exit:*/{
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_ExceptionSwap(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
        if ( unlikely(__Pyx_GetException(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
        __Pyx_XGOTREF(__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_10);
        __Pyx_XGOTREF(__pyx_t_11);
        __Pyx_XGOTREF(__pyx_t_12);
        __Pyx_XGOTREF(__pyx_t_13);
        __Pyx_XGOTREF(__pyx_t_14);
        __pyx_t_6 = __pyx_lineno; __pyx_t_7 = __pyx_clineno; __pyx_t_8 = __pyx_filename;
        {
          ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14385, __pyx_L10_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_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_ErrRestore(__pyx_t_9, __pyx_t_10, __pyx_t_11);
        __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
        __pyx_lineno = __pyx_t_6; __pyx_clineno = __pyx_t_7; __pyx_filename = __pyx_t_8;
        goto __pyx_L4_error;
        __pyx_L10_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_9); __pyx_t_9 = 0;
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
        goto __pyx_L4_error;
      }
      __pyx_L8:;
    }
  }
 14386:         finally:
+14387:             self._lock.release()
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_5 = __pyx_v_self->_lock;
      __Pyx_INCREF(__pyx_t_5);
      __pyx_t_4 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_5, 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_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14387, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9);
      if ( unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_13, &__pyx_t_12) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_13, &__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_14);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_9);
      __pyx_t_7 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_15 = __pyx_filename;
      {
        __pyx_t_5 = __pyx_v_self->_lock;
        __Pyx_INCREF(__pyx_t_5);
        __pyx_t_4 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_5, 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_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14387, __pyx_L12_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      __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_XGIVEREF(__pyx_t_14);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_ErrRestore(__pyx_t_14, __pyx_t_13, __pyx_t_12);
      __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0;
      __pyx_lineno = __pyx_t_7; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_15;
      goto __pyx_L1_error;
      __pyx_L12_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);
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }
+14388:         return self
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;
 14389: 
+14390:     def __len__(self):
/* Python wrapper */
static Py_ssize_t __pyx_pw_7questdb_7_client_12PooledSender_9__len__(PyObject *__pyx_v_self); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledSender_8__len__, "Number of buffered (unpublished) rows.");
#if CYTHON_UPDATE_DESCRIPTOR_DOC
struct wrapperbase __pyx_wrapperbase_7questdb_7_client_12PooledSender_8__len__;
#endif
static Py_ssize_t __pyx_pw_7questdb_7_client_12PooledSender_9__len__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_8__len__(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self));

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

static Py_ssize_t __pyx_pf_7questdb_7_client_12PooledSender_8__len__(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self) {
  Py_ssize_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("questdb._client.PooledSender.__len__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 14391:         """Number of buffered (unpublished) rows."""
+14392:         self._lock_enter('__len__')
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_lock_enter(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_len); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14392, __pyx_L1_error)
+14393:         try:
  /*try:*/ {
+14394:             self._check_open('__len__')
    __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_len); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14394, __pyx_L4_error)
+14395:             return line_sender_buffer_row_count(self._buffer._impl)
    __pyx_r = line_sender_buffer_row_count(__pyx_v_self->_buffer->_impl);
    goto __pyx_L3_return;
  }
 14396:         finally:
+14397:             self._lock.release()
  /*finally:*/ {
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
      if ( unlikely(__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0)) __Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __pyx_t_2 = __pyx_lineno; __pyx_t_3 = __pyx_clineno; __pyx_t_4 = __pyx_filename;
      {
        __pyx_t_12 = __pyx_v_self->_lock;
        __Pyx_INCREF(__pyx_t_12);
        __pyx_t_13 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_12, NULL};
          __pyx_t_11 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_13, (1-__pyx_t_13) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 14397, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_11);
        }
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      }
      __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_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ErrRestore(__pyx_t_5, __pyx_t_6, __pyx_t_7);
      __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
      __pyx_lineno = __pyx_t_2; __pyx_clineno = __pyx_t_3; __pyx_filename = __pyx_t_4;
      goto __pyx_L1_error;
      __pyx_L7_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);
      __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_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L3_return: {
      __pyx_t_14 = __pyx_r;
      __pyx_t_12 = __pyx_v_self->_lock;
      __Pyx_INCREF(__pyx_t_12);
      __pyx_t_13 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_12, NULL};
        __pyx_t_11 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_13, (1-__pyx_t_13) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 14397, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
      }
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_r = __pyx_t_14;
      goto __pyx_L0;
    }
  }
 14398: 
+14399:     def flush(self, *, bint wait=False):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_11flush(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledSender_10flush, "\n        Publish and clear buffered rows.\n\n        By default this returns after local store-and-forward acceptance.\n        Pass ``wait=True`` to wait for the server's OK acknowledgement of\n        everything published through this lease. The wait is a pure ack\n        barrier: only a terminal connection failure raises. Server\n        rejections are delivered to the pool's ``error_handler``\n        (default: the ``questdb`` logger) instead; retriable ones are\n        replayed by the store-and-forward queue.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledSender_11flush = {"flush", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledSender_11flush, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledSender_10flush};
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_11flush(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
) {
  int __pyx_v_wait;
  #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("flush (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_wait,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(0, 14399, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, 0, __pyx_kwds_len, "flush", 0) < (0)) __PYX_ERR(0, 14399, __pyx_L3_error)
    } else if (unlikely(__pyx_nargs != 0)) {
      goto __pyx_L5_argtuple_error;
    } else {
    }
    if (values[0]) {
      __pyx_v_wait = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_wait == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 14399, __pyx_L3_error)
    } else {
      __pyx_v_wait = ((int)0);
    }
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("flush", 1, 0, 0, __pyx_nargs); __PYX_ERR(0, 14399, __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.PooledSender.flush", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_10flush(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self), __pyx_v_wait);

  /* 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_12PooledSender_10flush(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, int __pyx_v_wait) {
  struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("questdb._client.PooledSender.flush", __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_17 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 14399, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_wait, Py_False) < (0)) __PYX_ERR(0, 14399, __pyx_L1_error)
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_11flush, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_flush, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[252])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14399, __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_CyFunction_SetDefaultsKwDict(__pyx_t_4, __pyx_t_17);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_flush, __pyx_t_4) < (0)) __PYX_ERR(0, 14399, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 14400:         """
 14401:         Publish and clear buffered rows.
 14402: 
 14403:         By default this returns after local store-and-forward acceptance.
 14404:         Pass ``wait=True`` to wait for the server's OK acknowledgement of
 14405:         everything published through this lease. The wait is a pure ack
 14406:         barrier: only a terminal connection failure raises. Server
 14407:         rejections are delivered to the pool's ``error_handler``
 14408:         (default: the ``questdb`` logger) instead; retriable ones are
 14409:         replayed by the store-and-forward queue.
 14410:         """
 14411:         cdef QuestDB handle
+14412:         self._lock_enter('flush')
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_lock_enter(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14412, __pyx_L1_error)
+14413:         try:
  /*try:*/ {
+14414:             handle = self._enter_call_locked()
    __pyx_t_2 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14414, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_2);
    __pyx_t_2 = 0;
+14415:             try:
    /*try:*/ {
+14416:                 self._flush_locked(wait)
      __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_flush_locked(__pyx_v_self, __pyx_v_wait); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14416, __pyx_L7_error)
    }
 14417:             finally:
+14418:                 self._exit_call_locked(handle)
    /*finally:*/ {
      /*normal exit:*/{
        ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14418, __pyx_L4_error)
        goto __pyx_L8;
      }
      __pyx_L7_error:;
      /*exception exit:*/{
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
         __Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
        if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_10);
        __Pyx_XGOTREF(__pyx_t_11);
        __pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
        {
          ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14418, __pyx_L10_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);
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
        __pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
        goto __pyx_L4_error;
        __pyx_L10_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);
        __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_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
        goto __pyx_L4_error;
      }
      __pyx_L8:;
    }
  }
 14419:         finally:
+14420:             self._lock.release()
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_12 = __pyx_v_self->_lock;
      __Pyx_INCREF(__pyx_t_12);
      __pyx_t_13 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_12, NULL};
        __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_13, (1-__pyx_t_13) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14420, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_8, &__pyx_t_7, &__pyx_t_6);
      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_8);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_6);
      __pyx_t_4 = __pyx_lineno; __pyx_t_3 = __pyx_clineno; __pyx_t_14 = __pyx_filename;
      {
        __pyx_t_12 = __pyx_v_self->_lock;
        __Pyx_INCREF(__pyx_t_12);
        __pyx_t_13 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_12, NULL};
          __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_13, (1-__pyx_t_13) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14420, __pyx_L12_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_7, __pyx_t_6);
      __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_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0;
      __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_3; __pyx_filename = __pyx_t_14;
      goto __pyx_L1_error;
      __pyx_L12_error:;
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_7, __pyx_t_6);
      __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;
      __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }
+14421:         return self
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;
 14422: 
+14423:     def wait(self, timeout_millis=0):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_13wait(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledSender_12wait, "\n        Wait for everything published through this lease to receive an OK\n        ack; returns immediately if this lease published nothing.\n\n        The wait is a pure ack barrier: only a terminal connection failure\n        raises. Server rejections are delivered to the pool's\n        ``error_handler`` (default: the ``questdb`` logger) instead.\n\n        ``timeout_millis`` is a no-progress timeout; ``0`` waits indefinitely.\n        When it expires this raises ``QuestDBError`` with ``code`` set to\n        ``QuestDBErrorCode.FailoverRetry`` and the rows stay queued. While the\n        lease cannot reconnect because an attached OIDC provider needs a new\n        sign-in, that error is :class:`~questdb.auth.OidcInteractionRequired`.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledSender_13wait = {"wait", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledSender_13wait, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledSender_12wait};
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_13wait(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_timeout_millis = 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("wait (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_millis,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(0, 14423, __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(0, 14423, __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, "wait", 0) < (0)) __PYX_ERR(0, 14423, __pyx_L3_error)
      if (!values[0]) values[0] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
    } else {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 14423, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[0]) values[0] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
    }
    __pyx_v_timeout_millis = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("wait", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 14423, __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.PooledSender.wait", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_12wait(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self), __pyx_v_timeout_millis);
  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_12PooledSender_12wait(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, PyObject *__pyx_v_timeout_millis) {
  struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb._client.PooledSender.wait", __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_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_13wait, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_wait, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[253])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14423, __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_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_mstate_global->__pyx_tuple[5]);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_wait, __pyx_t_4) < (0)) __PYX_ERR(0, 14423, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 14424:         """
 14425:         Wait for everything published through this lease to receive an OK
 14426:         ack; returns immediately if this lease published nothing.
 14427: 
 14428:         The wait is a pure ack barrier: only a terminal connection failure
 14429:         raises. Server rejections are delivered to the pool's
 14430:         ``error_handler`` (default: the ``questdb`` logger) instead.
 14431: 
 14432:         ``timeout_millis`` is a no-progress timeout; ``0`` waits indefinitely.
 14433:         When it expires this raises ``QuestDBError`` with ``code`` set to
 14434:         ``QuestDBErrorCode.FailoverRetry`` and the rows stay queued. While the
 14435:         lease cannot reconnect because an attached OIDC provider needs a new
 14436:         sign-in, that error is :class:`~questdb.auth.OidcInteractionRequired`.
 14437:         """
+14438:         if not isinstance(timeout_millis, int) or isinstance(timeout_millis, bool):
  __pyx_t_2 = PyLong_Check(__pyx_v_timeout_millis); 
  __pyx_t_3 = (!__pyx_t_2);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_timeout_millis, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); 
  __pyx_t_1 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+14439:             raise TypeError('"timeout_millis" must be a non-negative int.')
    __pyx_t_5 = NULL;
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_timeout_millis_must_be_a_non_ne};
      __pyx_t_4 = __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_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14439, __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(0, 14439, __pyx_L1_error)
+14440:         if timeout_millis < 0:
  __pyx_t_4 = PyObject_RichCompare(__pyx_v_timeout_millis, __pyx_mstate_global->__pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14440, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 14440, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+14441:             raise ValueError('timeout_millis must be non-negative.')
    __pyx_t_5 = NULL;
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_timeout_millis_must_be_non_negat};
      __pyx_t_4 = __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_4)) __PYX_ERR(0, 14441, __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(0, 14441, __pyx_L1_error)
 14442:         cdef QuestDB handle
+14443:         self._lock_enter('wait')
  __pyx_t_7 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_lock_enter(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_wait); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14443, __pyx_L1_error)
+14444:         try:
  /*try:*/ {
+14445:             self._check_open('wait')
    __pyx_t_7 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_wait); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14445, __pyx_L8_error)
+14446:             handle = self._enter_call_locked()
    __pyx_t_4 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14446, __pyx_L8_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_4);
    __pyx_t_4 = 0;
+14447:             try:
    /*try:*/ {
+14448:                 self._wait_locked(<uint64_t>timeout_millis)
      __pyx_t_8 = __Pyx_PyLong_As_uint64_t(__pyx_v_timeout_millis); if (unlikely((__pyx_t_8 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 14448, __pyx_L11_error)
      __pyx_t_7 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_wait_locked(__pyx_v_self, ((uint64_t)__pyx_t_8)); if (unlikely(__pyx_t_7 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14448, __pyx_L11_error)
    }
 14449:             finally:
+14450:                 self._exit_call_locked(handle)
    /*finally:*/ {
      /*normal exit:*/{
        ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14450, __pyx_L8_error)
        goto __pyx_L12;
      }
      __pyx_L11_error:;
      /*exception exit:*/{
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
        if ( unlikely(__Pyx_GetException(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14) < 0)) __Pyx_ErrFetch(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
        __Pyx_XGOTREF(__pyx_t_12);
        __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_t_9 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_11 = __pyx_filename;
        {
          ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14450, __pyx_L14_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);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_ErrRestore(__pyx_t_12, __pyx_t_13, __pyx_t_14);
        __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
        __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_11;
        goto __pyx_L8_error;
        __pyx_L14_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);
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
        goto __pyx_L8_error;
      }
      __pyx_L12:;
    }
  }
 14451:         finally:
+14452:             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_4 = __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_4)) __PYX_ERR(0, 14452, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      goto __pyx_L9;
    }
    __pyx_L8_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_14, &__pyx_t_13, &__pyx_t_12);
      if ( unlikely(__Pyx_GetException(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15) < 0)) __Pyx_ErrFetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15);
      __Pyx_XGOTREF(__pyx_t_17);
      __Pyx_XGOTREF(__pyx_t_16);
      __Pyx_XGOTREF(__pyx_t_15);
      __Pyx_XGOTREF(__pyx_t_14);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_12);
      __pyx_t_10 = __pyx_lineno; __pyx_t_9 = __pyx_clineno; __pyx_t_18 = __pyx_filename;
      {
        __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_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_4)) __PYX_ERR(0, 14452, __pyx_L16_error)
          __Pyx_GOTREF(__pyx_t_4);
        }
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      }
      __Pyx_XGIVEREF(__pyx_t_14);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_ExceptionReset(__pyx_t_14, __pyx_t_13, __pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_17);
      __Pyx_XGIVEREF(__pyx_t_16);
      __Pyx_XGIVEREF(__pyx_t_15);
      __Pyx_ErrRestore(__pyx_t_17, __pyx_t_16, __pyx_t_15);
      __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0;
      __pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_9; __pyx_filename = __pyx_t_18;
      goto __pyx_L1_error;
      __pyx_L16_error:;
      __Pyx_XGIVEREF(__pyx_t_14);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_ExceptionReset(__pyx_t_14, __pyx_t_13, __pyx_t_12);
      __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L9:;
  }
+14453:         return self
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;
 14454: 
+14455:     def flush_and_get_fsn(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_15flush_and_get_fsn(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledSender_14flush_and_get_fsn, "\n        Publish and clear buffered rows, returning the frame sequence\n        number (FSN) of the published frame, or ``None`` if the buffer was\n        empty.\n\n        FSNs are watermarks of the lease's pooled connection: use them for\n        progress tracking while this lease is held (see\n        :meth:`await_acked_fsn`); they are not portable receipts across\n        leases, which may borrow different connections. Configure\n        ``auto_flush=off`` when this call must publish and identify one whole\n        application batch; auto-flush may already have published and cleared\n        some or all buffered rows.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledSender_15flush_and_get_fsn = {"flush_and_get_fsn", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledSender_15flush_and_get_fsn, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledSender_14flush_and_get_fsn};
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_15flush_and_get_fsn(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
) {
  #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("flush_and_get_fsn (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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("flush_and_get_fsn", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("flush_and_get_fsn", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_14flush_and_get_fsn(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_12PooledSender_14flush_and_get_fsn(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self) {
  struct line_sender_error *__pyx_v_err;
  PyThreadState *__pyx_v_gs;
  struct line_sender_qwpws_fsn __pyx_v_fsn;
  int __pyx_v_ok;
  struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("questdb._client.PooledSender.flush_and_get_fsn", __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_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_15flush_and_get_fsn, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_flush_and_get_fsn, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[254])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14455, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_flush_and_get_fsn, __pyx_t_4) < (0)) __PYX_ERR(0, 14455, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 14456:         """
 14457:         Publish and clear buffered rows, returning the frame sequence
 14458:         number (FSN) of the published frame, or ``None`` if the buffer was
 14459:         empty.
 14460: 
 14461:         FSNs are watermarks of the lease's pooled connection: use them for
 14462:         progress tracking while this lease is held (see
 14463:         :meth:`await_acked_fsn`); they are not portable receipts across
 14464:         leases, which may borrow different connections. Configure
 14465:         ``auto_flush=off`` when this call must publish and identify one whole
 14466:         application batch; auto-flush may already have published and cleared
 14467:         some or all buffered rows.
 14468:         """
+14469:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+14470:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
 14471:         cdef line_sender_qwpws_fsn fsn
+14472:         cdef bint ok = False
  __pyx_v_ok = 0;
 14473:         cdef QuestDB handle
+14474:         self._lock_enter('flush_and_get_fsn')
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_lock_enter(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush_and_get_fsn); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14474, __pyx_L1_error)
+14475:         try:
  /*try:*/ {
+14476:             self._check_open('flush_and_get_fsn')
    __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush_and_get_fsn); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14476, __pyx_L4_error)
+14477:             self._check_not_in_row('flush_and_get_fsn')
    __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_not_in_row(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush_and_get_fsn); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14477, __pyx_L4_error)
+14478:             handle = self._enter_call_locked()
    __pyx_t_2 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14478, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_2);
    __pyx_t_2 = 0;
+14479:             try:
    /*try:*/ {
+14480:                 _ensure_doesnt_have_gil(&gs)
      (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+14481:                 ok = qwp_sender_flush_buffer_and_get_fsn(
      __pyx_v_ok = qwp_sender_flush_buffer_and_get_fsn(__pyx_v_self->_qwp, __pyx_v_self->_buffer->_impl, (&__pyx_v_fsn), (&__pyx_v_err));
 14482:                     self._qwp, self._buffer._impl, &fsn, &err)
+14483:                 _ensure_has_gil(&gs)
      __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+14484:                 if not ok:
      __pyx_t_3 = (!__pyx_v_ok);
      if (unlikely(__pyx_t_3)) {
/* … */
      }
+14485:                     raise c_err_to_py(err)
        __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14485, __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(0, 14485, __pyx_L7_error)
+14486:                 qdb_pystr_buf_clear(self._buffer._b)
      qdb_pystr_buf_clear(__pyx_v_self->_buffer->_b);
+14487:                 self._batch_started_ms = 0
      __pyx_v_self->_batch_started_ms = 0;
    }
 14488:             finally:
+14489:                 self._exit_call_locked(handle)
    /*finally:*/ {
      /*normal exit:*/{
        ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14489, __pyx_L4_error)
        goto __pyx_L8;
      }
      __pyx_L7_error:;
      /*exception exit:*/{
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
         __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
        if ( unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_10);
        __Pyx_XGOTREF(__pyx_t_11);
        __Pyx_XGOTREF(__pyx_t_12);
        __pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
        {
          ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14489, __pyx_L11_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);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
        __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
        __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6;
        goto __pyx_L4_error;
        __pyx_L11_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);
        __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_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
        goto __pyx_L4_error;
      }
      __pyx_L8:;
    }
  }
 14490:         finally:
+14491:             self._lock.release()
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_13 = __pyx_v_self->_lock;
      __Pyx_INCREF(__pyx_t_13);
      __pyx_t_14 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_13, NULL};
        __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_14, (1-__pyx_t_14) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14491, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7);
      if ( unlikely(__Pyx_GetException(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_7);
      __pyx_t_5 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_15 = __pyx_filename;
      {
        __pyx_t_13 = __pyx_v_self->_lock;
        __Pyx_INCREF(__pyx_t_13);
        __pyx_t_14 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_13, NULL};
          __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_14, (1-__pyx_t_14) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14491, __pyx_L13_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      __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);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_ErrRestore(__pyx_t_12, __pyx_t_11, __pyx_t_10);
      __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0;
      __pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_15;
      goto __pyx_L1_error;
      __pyx_L13_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);
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }
+14492:         return fsn.value if fsn.has_value else None
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = (__pyx_v_fsn.has_value != 0);
  if (__pyx_t_3) {
    __pyx_t_13 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 14492, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_2 = __pyx_t_13;
    __pyx_t_13 = 0;
  } else {
    __Pyx_INCREF(Py_None);
    __pyx_t_2 = Py_None;
  }
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 14493: 
+14494:     def flush_and_keep_and_get_fsn(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_17flush_and_keep_and_get_fsn(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledSender_16flush_and_keep_and_get_fsn, "\n        Publish buffered rows without clearing the buffer, returning the\n        published frame's FSN, or ``None`` if the buffer was empty.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledSender_17flush_and_keep_and_get_fsn = {"flush_and_keep_and_get_fsn", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledSender_17flush_and_keep_and_get_fsn, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledSender_16flush_and_keep_and_get_fsn};
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_17flush_and_keep_and_get_fsn(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
) {
  #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("flush_and_keep_and_get_fsn (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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("flush_and_keep_and_get_fsn", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("flush_and_keep_and_get_fsn", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_16flush_and_keep_and_get_fsn(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_12PooledSender_16flush_and_keep_and_get_fsn(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self) {
  struct line_sender_error *__pyx_v_err;
  PyThreadState *__pyx_v_gs;
  struct line_sender_qwpws_fsn __pyx_v_fsn;
  int __pyx_v_ok;
  struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("questdb._client.PooledSender.flush_and_keep_and_get_fsn", __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_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_17flush_and_keep_and_get_fsn, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_flush_and_keep_and, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[255])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14494, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_flush_and_keep_and_get_fsn, __pyx_t_4) < (0)) __PYX_ERR(0, 14494, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 14495:         """
 14496:         Publish buffered rows without clearing the buffer, returning the
 14497:         published frame's FSN, or ``None`` if the buffer was empty.
 14498:         """
+14499:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+14500:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
 14501:         cdef line_sender_qwpws_fsn fsn
+14502:         cdef bint ok = False
  __pyx_v_ok = 0;
 14503:         cdef QuestDB handle
+14504:         self._lock_enter('flush_and_keep_and_get_fsn')
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_lock_enter(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush_and_keep_and_get_fsn); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14504, __pyx_L1_error)
+14505:         try:
  /*try:*/ {
+14506:             self._check_open('flush_and_keep_and_get_fsn')
    __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush_and_keep_and_get_fsn); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14506, __pyx_L4_error)
+14507:             self._check_not_in_row('flush_and_keep_and_get_fsn')
    __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_not_in_row(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_flush_and_keep_and_get_fsn); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14507, __pyx_L4_error)
+14508:             handle = self._enter_call_locked()
    __pyx_t_2 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14508, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_2);
    __pyx_t_2 = 0;
+14509:             try:
    /*try:*/ {
+14510:                 _ensure_doesnt_have_gil(&gs)
      (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+14511:                 ok = qwp_sender_flush_buffer_and_keep_and_get_fsn(
      __pyx_v_ok = qwp_sender_flush_buffer_and_keep_and_get_fsn(__pyx_v_self->_qwp, __pyx_v_self->_buffer->_impl, (&__pyx_v_fsn), (&__pyx_v_err));
 14512:                     self._qwp, self._buffer._impl, &fsn, &err)
+14513:                 _ensure_has_gil(&gs)
      __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+14514:                 if not ok:
      __pyx_t_3 = (!__pyx_v_ok);
      if (unlikely(__pyx_t_3)) {
/* … */
      }
+14515:                     raise c_err_to_py(err)
        __pyx_t_2 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14515, __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(0, 14515, __pyx_L7_error)
+14516:                 if fsn.has_value:
      __pyx_t_3 = (__pyx_v_fsn.has_value != 0);
      if (__pyx_t_3) {
/* … */
      }
    }
+14517:                     self._batch_started_ms = (
        __pyx_v_self->_batch_started_ms = __Pyx_div_int64_t(line_sender_now_micros(), 0x3E8, 1);
 14518:                         line_sender_now_micros() // 1000)
 14519:             finally:
+14520:                 self._exit_call_locked(handle)
    /*finally:*/ {
      /*normal exit:*/{
        ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14520, __pyx_L4_error)
        goto __pyx_L8;
      }
      __pyx_L7_error:;
      /*exception exit:*/{
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
         __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
        if ( unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_10);
        __Pyx_XGOTREF(__pyx_t_11);
        __Pyx_XGOTREF(__pyx_t_12);
        __pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
        {
          ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14520, __pyx_L12_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);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
        __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
        __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6;
        goto __pyx_L4_error;
        __pyx_L12_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);
        __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_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
        goto __pyx_L4_error;
      }
      __pyx_L8:;
    }
  }
 14521:         finally:
+14522:             self._lock.release()
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_13 = __pyx_v_self->_lock;
      __Pyx_INCREF(__pyx_t_13);
      __pyx_t_14 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_13, NULL};
        __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_14, (1-__pyx_t_14) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14522, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7);
      if ( unlikely(__Pyx_GetException(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_7);
      __pyx_t_5 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_15 = __pyx_filename;
      {
        __pyx_t_13 = __pyx_v_self->_lock;
        __Pyx_INCREF(__pyx_t_13);
        __pyx_t_14 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_13, NULL};
          __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_14, (1-__pyx_t_14) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14522, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      __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);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_ErrRestore(__pyx_t_12, __pyx_t_11, __pyx_t_10);
      __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0;
      __pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_15;
      goto __pyx_L1_error;
      __pyx_L14_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);
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }
+14523:         return fsn.value if fsn.has_value else None
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = (__pyx_v_fsn.has_value != 0);
  if (__pyx_t_3) {
    __pyx_t_13 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 14523, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_2 = __pyx_t_13;
    __pyx_t_13 = 0;
  } else {
    __Pyx_INCREF(Py_None);
    __pyx_t_2 = Py_None;
  }
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 14524: 
+14525:     def poll_error(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_19poll_error(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledSender_18poll_error, "\n        Poll the next server-rejection diagnostic recorded on the lease's\n        connection since this lease was borrowed, as a\n        :class:`SenderError`, or ``None`` when none is pending.\n\n        The pool's ``error_handler`` independently receives every rejection\n        the moment it is recorded; polling here is a per-lease pull\n        alternative for code that wants diagnostics inline.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledSender_19poll_error = {"poll_error", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledSender_19poll_error, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledSender_18poll_error};
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_19poll_error(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
) {
  #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("poll_error (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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("poll_error", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("poll_error", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_18poll_error(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_12PooledSender_18poll_error(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_qwpws_error *__pyx_v_c_error;
  struct line_sender_qwpws_error_view __pyx_v_view;
  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_AddTraceback("questdb._client.PooledSender.poll_error", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_19poll_error, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_poll_error, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[256])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14525, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_poll_error, __pyx_t_4) < (0)) __PYX_ERR(0, 14525, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 14526:         """
 14527:         Poll the next server-rejection diagnostic recorded on the lease's
 14528:         connection since this lease was borrowed, as a
 14529:         :class:`SenderError`, or ``None`` when none is pending.
 14530: 
 14531:         The pool's ``error_handler`` independently receives every rejection
 14532:         the moment it is recorded; polling here is a per-lease pull
 14533:         alternative for code that wants diagnostics inline.
 14534:         """
+14535:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+14536:         cdef line_sender_qwpws_error* c_error = NULL
  __pyx_v_c_error = NULL;
 14537:         cdef line_sender_qwpws_error_view view
+14538:         self._lock_enter('poll_error')
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_lock_enter(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_poll_error); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14538, __pyx_L1_error)
+14539:         try:
  /*try:*/ {
+14540:             self._check_open('poll_error')
    __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_poll_error); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14540, __pyx_L4_error)
+14541:             if not qwp_sender_poll_error(self._qwp, &c_error, &err):
    __pyx_t_2 = (!qwp_sender_poll_error(__pyx_v_self->_qwp, (&__pyx_v_c_error), (&__pyx_v_err)));
    if (unlikely(__pyx_t_2)) {
/* … */
    }
+14542:                 raise c_err_to_py(err)
      __pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14542, __pyx_L4_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(0, 14542, __pyx_L4_error)
+14543:             if c_error == NULL:
    __pyx_t_2 = (__pyx_v_c_error == NULL);
    if (__pyx_t_2) {
/* … */
    }
+14544:                 return None
      __Pyx_XDECREF(__pyx_r);
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      goto __pyx_L3_return;
+14545:             try:
    /*try:*/ {
+14546:                 view = line_sender_qwpws_error_get_view(c_error)
      __pyx_v_view = line_sender_qwpws_error_get_view(__pyx_v_c_error);
+14547:                 return _sender_error_from_raw(
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_4 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_sender_error_from_raw); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14547, __pyx_L9_error)
      __Pyx_GOTREF(__pyx_t_5);
+14548:                     c_sender_error_view_to_raw(view))
      __pyx_t_6 = __pyx_f_7questdb_7_client_c_sender_error_view_to_raw(__pyx_v_view); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14548, __pyx_L9_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = 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_7 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_6};
        __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __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;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14547, __pyx_L9_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      goto __pyx_L8_return;
    }
 14549:             finally:
+14550:                 line_sender_qwpws_error_free(c_error)
    /*finally:*/ {
      __pyx_L9_error:;
      /*exception exit:*/{
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __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_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
         __Pyx_ExceptionSwap(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
        if ( unlikely(__Pyx_GetException(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13) < 0)) __Pyx_ErrFetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
        __Pyx_XGOTREF(__pyx_t_11);
        __Pyx_XGOTREF(__pyx_t_12);
        __Pyx_XGOTREF(__pyx_t_13);
        __Pyx_XGOTREF(__pyx_t_14);
        __Pyx_XGOTREF(__pyx_t_15);
        __Pyx_XGOTREF(__pyx_t_16);
        __pyx_t_8 = __pyx_lineno; __pyx_t_9 = __pyx_clineno; __pyx_t_10 = __pyx_filename;
        {
          line_sender_qwpws_error_free(__pyx_v_c_error);
        }
        __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_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_ErrRestore(__pyx_t_11, __pyx_t_12, __pyx_t_13);
        __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
        __pyx_lineno = __pyx_t_8; __pyx_clineno = __pyx_t_9; __pyx_filename = __pyx_t_10;
        goto __pyx_L4_error;
      }
      __pyx_L8_return: {
        __pyx_t_16 = __pyx_r;
        __pyx_r = 0;
        line_sender_qwpws_error_free(__pyx_v_c_error);
        __pyx_r = __pyx_t_16;
        __pyx_t_16 = 0;
        goto __pyx_L3_return;
      }
    }
  }
 14551:         finally:
+14552:             self._lock.release()
  /*finally:*/ {
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 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_ExceptionSwap(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11);
      if ( unlikely(__Pyx_GetException(&__pyx_t_16, &__pyx_t_15, &__pyx_t_14) < 0)) __Pyx_ErrFetch(&__pyx_t_16, &__pyx_t_15, &__pyx_t_14);
      __Pyx_XGOTREF(__pyx_t_16);
      __Pyx_XGOTREF(__pyx_t_15);
      __Pyx_XGOTREF(__pyx_t_14);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_11);
      __pyx_t_9 = __pyx_lineno; __pyx_t_8 = __pyx_clineno; __pyx_t_17 = __pyx_filename;
      {
        __pyx_t_5 = __pyx_v_self->_lock;
        __Pyx_INCREF(__pyx_t_5);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14552, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      }
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_12, __pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_16);
      __Pyx_XGIVEREF(__pyx_t_15);
      __Pyx_XGIVEREF(__pyx_t_14);
      __Pyx_ErrRestore(__pyx_t_16, __pyx_t_15, __pyx_t_14);
      __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0;
      __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_8; __pyx_filename = __pyx_t_17;
      goto __pyx_L1_error;
      __pyx_L14_error:;
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_12, __pyx_t_11);
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L3_return: {
      __pyx_t_11 = __pyx_r;
      __pyx_r = 0;
      __pyx_t_5 = __pyx_v_self->_lock;
      __Pyx_INCREF(__pyx_t_5);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14552, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_r = __pyx_t_11;
      __pyx_t_11 = 0;
      goto __pyx_L0;
    }
  }
 14553: 
+14554:     def error_events_dropped(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_21error_events_dropped(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledSender_20error_events_dropped, "\n        Diagnostics dropped from the lease's connection ring\n        (``error_inbox_capacity``).\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledSender_21error_events_dropped = {"error_events_dropped", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledSender_21error_events_dropped, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledSender_20error_events_dropped};
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_21error_events_dropped(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
) {
  #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("error_events_dropped (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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("error_events_dropped", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("error_events_dropped", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_20error_events_dropped(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_12PooledSender_20error_events_dropped(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self) {
  struct line_sender_error *__pyx_v_err;
  uint64_t __pyx_v_dropped;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client.PooledSender.error_events_dropped", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_21error_events_dropped, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_error_events_droppe, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[257])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14554, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_error_events_dropped, __pyx_t_4) < (0)) __PYX_ERR(0, 14554, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 14555:         """
 14556:         Diagnostics dropped from the lease's connection ring
 14557:         (``error_inbox_capacity``).
 14558:         """
+14559:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+14560:         cdef uint64_t dropped = 0
  __pyx_v_dropped = 0;
+14561:         self._lock_enter('error_events_dropped')
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_lock_enter(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_error_events_dropped); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14561, __pyx_L1_error)
+14562:         try:
  /*try:*/ {
+14563:             self._check_open('error_events_dropped')
    __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_error_events_dropped); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14563, __pyx_L4_error)
+14564:             if not qwp_sender_error_events_dropped(
    __pyx_t_2 = (!qwp_sender_error_events_dropped(__pyx_v_self->_qwp, (&__pyx_v_dropped), (&__pyx_v_err)));
    if (unlikely(__pyx_t_2)) {
/* … */
    }
  }
 14565:                     self._qwp, &dropped, &err):
+14566:                 raise c_err_to_py(err)
      __pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14566, __pyx_L4_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(0, 14566, __pyx_L4_error)
 14567:         finally:
+14568:             self._lock.release()
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_4 = __pyx_v_self->_lock;
      __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_release, __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(0, 14568, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
      if ( unlikely(__Pyx_GetException(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_14);
      __pyx_t_6 = __pyx_lineno; __pyx_t_7 = __pyx_clineno; __pyx_t_8 = __pyx_filename;
      {
        __pyx_t_4 = __pyx_v_self->_lock;
        __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_release, __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(0, 14568, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      }
      __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_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ErrRestore(__pyx_t_9, __pyx_t_10, __pyx_t_11);
      __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
      __pyx_lineno = __pyx_t_6; __pyx_clineno = __pyx_t_7; __pyx_filename = __pyx_t_8;
      goto __pyx_L1_error;
      __pyx_L8_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_9); __pyx_t_9 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }
+14569:         return dropped
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __Pyx_PyLong_From_uint64_t(__pyx_v_dropped); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14569, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 14570: 
+14571:     def published_fsn(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_23published_fsn(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledSender_22published_fsn, "\n        Highest FSN published locally on the lease's pooled connection, or\n        ``None`` if nothing has been published on it yet.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledSender_23published_fsn = {"published_fsn", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledSender_23published_fsn, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledSender_22published_fsn};
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_23published_fsn(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
) {
  #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("published_fsn (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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("published_fsn", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("published_fsn", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_22published_fsn(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_12PooledSender_22published_fsn(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_qwpws_fsn __pyx_v_fsn;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client.PooledSender.published_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_23published_fsn, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_published_fsn, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[258])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14571, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_published_fsn, __pyx_t_4) < (0)) __PYX_ERR(0, 14571, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 14572:         """
 14573:         Highest FSN published locally on the lease's pooled connection, or
 14574:         ``None`` if nothing has been published on it yet.
 14575:         """
+14576:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 14577:         cdef line_sender_qwpws_fsn fsn
+14578:         self._lock_enter('published_fsn')
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_lock_enter(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_published_fsn); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14578, __pyx_L1_error)
+14579:         try:
  /*try:*/ {
+14580:             self._check_open('published_fsn')
    __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_published_fsn); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14580, __pyx_L4_error)
+14581:             if not qwp_sender_published_fsn(self._qwp, &fsn, &err):
    __pyx_t_2 = (!qwp_sender_published_fsn(__pyx_v_self->_qwp, (&__pyx_v_fsn), (&__pyx_v_err)));
    if (unlikely(__pyx_t_2)) {
/* … */
    }
  }
+14582:                 raise c_err_to_py(err)
      __pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14582, __pyx_L4_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(0, 14582, __pyx_L4_error)
 14583:         finally:
+14584:             self._lock.release()
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_4 = __pyx_v_self->_lock;
      __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_release, __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(0, 14584, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
      if ( unlikely(__Pyx_GetException(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_14);
      __pyx_t_6 = __pyx_lineno; __pyx_t_7 = __pyx_clineno; __pyx_t_8 = __pyx_filename;
      {
        __pyx_t_4 = __pyx_v_self->_lock;
        __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_release, __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(0, 14584, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      }
      __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_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ErrRestore(__pyx_t_9, __pyx_t_10, __pyx_t_11);
      __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
      __pyx_lineno = __pyx_t_6; __pyx_clineno = __pyx_t_7; __pyx_filename = __pyx_t_8;
      goto __pyx_L1_error;
      __pyx_L8_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_9); __pyx_t_9 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }
+14585:         return fsn.value if fsn.has_value else None
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = (__pyx_v_fsn.has_value != 0);
  if (__pyx_t_2) {
    __pyx_t_4 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14585, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __pyx_t_4;
    __pyx_t_4 = 0;
  } else {
    __Pyx_INCREF(Py_None);
    __pyx_t_3 = Py_None;
  }
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 14586: 
+14587:     def acked_fsn(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_25acked_fsn(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledSender_24acked_fsn, "\n        Highest FSN completed on the lease's pooled connection by ACK or\n        drop-and-continue rejection, or ``None`` if no frame has completed\n        yet. A completed frame is not necessarily applied: a rejected frame\n        the queue drops to make progress also advances this watermark.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledSender_25acked_fsn = {"acked_fsn", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledSender_25acked_fsn, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledSender_24acked_fsn};
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_25acked_fsn(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
) {
  #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("acked_fsn (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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("acked_fsn", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("acked_fsn", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_24acked_fsn(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_12PooledSender_24acked_fsn(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self) {
  struct line_sender_error *__pyx_v_err;
  struct line_sender_qwpws_fsn __pyx_v_fsn;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client.PooledSender.acked_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_25acked_fsn, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_acked_fsn, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[259])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14587, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_acked_fsn, __pyx_t_4) < (0)) __PYX_ERR(0, 14587, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 14588:         """
 14589:         Highest FSN completed on the lease's pooled connection by ACK or
 14590:         drop-and-continue rejection, or ``None`` if no frame has completed
 14591:         yet. A completed frame is not necessarily applied: a rejected frame
 14592:         the queue drops to make progress also advances this watermark.
 14593:         """
+14594:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
 14595:         cdef line_sender_qwpws_fsn fsn
+14596:         self._lock_enter('acked_fsn')
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_lock_enter(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_acked_fsn); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14596, __pyx_L1_error)
+14597:         try:
  /*try:*/ {
+14598:             self._check_open('acked_fsn')
    __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_acked_fsn); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14598, __pyx_L4_error)
+14599:             if not qwp_sender_acked_fsn(self._qwp, &fsn, &err):
    __pyx_t_2 = (!qwp_sender_acked_fsn(__pyx_v_self->_qwp, (&__pyx_v_fsn), (&__pyx_v_err)));
    if (unlikely(__pyx_t_2)) {
/* … */
    }
  }
+14600:                 raise c_err_to_py(err)
      __pyx_t_3 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14600, __pyx_L4_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(0, 14600, __pyx_L4_error)
 14601:         finally:
+14602:             self._lock.release()
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_4 = __pyx_v_self->_lock;
      __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_release, __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(0, 14602, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
      if ( unlikely(__Pyx_GetException(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_14);
      __pyx_t_6 = __pyx_lineno; __pyx_t_7 = __pyx_clineno; __pyx_t_8 = __pyx_filename;
      {
        __pyx_t_4 = __pyx_v_self->_lock;
        __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_release, __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(0, 14602, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      }
      __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_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ErrRestore(__pyx_t_9, __pyx_t_10, __pyx_t_11);
      __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
      __pyx_lineno = __pyx_t_6; __pyx_clineno = __pyx_t_7; __pyx_filename = __pyx_t_8;
      goto __pyx_L1_error;
      __pyx_L8_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_9); __pyx_t_9 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }
+14603:         return fsn.value if fsn.has_value else None
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = (__pyx_v_fsn.has_value != 0);
  if (__pyx_t_2) {
    __pyx_t_4 = __Pyx_PyLong_From_uint64_t(__pyx_v_fsn.value); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14603, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __pyx_t_4;
    __pyx_t_4 = 0;
  } else {
    __Pyx_INCREF(Py_None);
    __pyx_t_3 = Py_None;
  }
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 14604: 
+14605:     def await_acked_fsn(self, fsn, timeout_millis=0):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_27await_acked_fsn(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledSender_26await_acked_fsn, "\n        Wait until the acknowledgement watermark reaches ``fsn`` (as\n        returned by :meth:`flush_and_get_fsn` on this lease).\n\n        Returns ``True`` once ``fsn`` is acknowledged, or ``False`` if the\n        no-progress timeout elapsed before ``fsn`` was acknowledged (``0``\n        waits indefinitely). Terminal connection failures raise. A wait from\n        an OIDC persistence callback can also raise retryable\n        :class:`~questdb.auth.OidcInteractionRequired` when reconnecting would\n        depend on that callback returning. The publication remains queued:\n        return from the callback and retry the ACK wait, not the publication.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledSender_27await_acked_fsn = {"await_acked_fsn", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledSender_27await_acked_fsn, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledSender_26await_acked_fsn};
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_27await_acked_fsn(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_fsn = 0;
  PyObject *__pyx_v_timeout_millis = 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("await_acked_fsn (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_fsn,&__pyx_mstate_global->__pyx_n_u_timeout_millis,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(0, 14605, __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(0, 14605, __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(0, 14605, __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, "await_acked_fsn", 0) < (0)) __PYX_ERR(0, 14605, __pyx_L3_error)
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("await_acked_fsn", 0, 1, 2, i); __PYX_ERR(0, 14605, __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(0, 14605, __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(0, 14605, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)__pyx_mstate_global->__pyx_int_0));
    }
    __pyx_v_fsn = values[0];
    __pyx_v_timeout_millis = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("await_acked_fsn", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 14605, __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.PooledSender.await_acked_fsn", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_26await_acked_fsn(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self), __pyx_v_fsn, __pyx_v_timeout_millis);
  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_12PooledSender_26await_acked_fsn(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, PyObject *__pyx_v_fsn, PyObject *__pyx_v_timeout_millis) {
  struct line_sender_error *__pyx_v_err;
  PyThreadState *__pyx_v_gs;
  uint64_t __pyx_v_c_fsn;
  uint64_t __pyx_v_c_timeout_millis;
  struct line_sender_qwpws_fsn __pyx_v_acked;
  int __pyx_v_ok;
  struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("questdb._client.PooledSender.await_acked_fsn", __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_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_27await_acked_fsn, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_await_acked_fsn, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[260])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14605, __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_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_mstate_global->__pyx_tuple[5]);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_await_acked_fsn, __pyx_t_4) < (0)) __PYX_ERR(0, 14605, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 14606:         """
 14607:         Wait until the acknowledgement watermark reaches ``fsn`` (as
 14608:         returned by :meth:`flush_and_get_fsn` on this lease).
 14609: 
 14610:         Returns ``True`` once ``fsn`` is acknowledged, or ``False`` if the
 14611:         no-progress timeout elapsed before ``fsn`` was acknowledged (``0``
 14612:         waits indefinitely). Terminal connection failures raise. A wait from
 14613:         an OIDC persistence callback can also raise retryable
 14614:         :class:`~questdb.auth.OidcInteractionRequired` when reconnecting would
 14615:         depend on that callback returning. The publication remains queued:
 14616:         return from the callback and retry the ACK wait, not the publication.
 14617:         """
+14618:         cdef line_sender_error* err = NULL
  __pyx_v_err = NULL;
+14619:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
 14620:         cdef uint64_t c_fsn
 14621:         cdef uint64_t c_timeout_millis
 14622:         cdef line_sender_qwpws_fsn acked
+14623:         cdef bint ok = False
  __pyx_v_ok = 0;
 14624:         cdef QuestDB handle
+14625:         if not isinstance(fsn, int) or isinstance(fsn, bool):
  __pyx_t_2 = PyLong_Check(__pyx_v_fsn); 
  __pyx_t_3 = (!__pyx_t_2);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_fsn, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); 
  __pyx_t_1 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+14626:             raise TypeError('"fsn" must be a non-negative int.')
    __pyx_t_5 = NULL;
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_fsn_must_be_a_non_negative_int};
      __pyx_t_4 = __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_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14626, __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(0, 14626, __pyx_L1_error)
+14627:         if fsn < 0:
  __pyx_t_4 = PyObject_RichCompare(__pyx_v_fsn, __pyx_mstate_global->__pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14627, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 14627, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+14628:             raise ValueError('"fsn" must be a non-negative int.')
    __pyx_t_5 = NULL;
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_fsn_must_be_a_non_negative_int};
      __pyx_t_4 = __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_4)) __PYX_ERR(0, 14628, __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(0, 14628, __pyx_L1_error)
+14629:         if not isinstance(timeout_millis, int) or isinstance(timeout_millis, bool):
  __pyx_t_3 = PyLong_Check(__pyx_v_timeout_millis); 
  __pyx_t_2 = (!__pyx_t_3);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L8_bool_binop_done;
  }
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_timeout_millis, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); 
  __pyx_t_1 = __pyx_t_2;
  __pyx_L8_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+14630:             raise TypeError('"timeout_millis" must be a non-negative int.')
    __pyx_t_5 = NULL;
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_timeout_millis_must_be_a_non_ne};
      __pyx_t_4 = __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_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14630, __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(0, 14630, __pyx_L1_error)
+14631:         if timeout_millis < 0:
  __pyx_t_4 = PyObject_RichCompare(__pyx_v_timeout_millis, __pyx_mstate_global->__pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14631, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 14631, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+14632:             raise ValueError('"timeout_millis" must be a non-negative int.')
    __pyx_t_5 = NULL;
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_timeout_millis_must_be_a_non_ne};
      __pyx_t_4 = __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_4)) __PYX_ERR(0, 14632, __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(0, 14632, __pyx_L1_error)
+14633:         c_fsn = fsn
  __pyx_t_7 = __Pyx_PyLong_As_uint64_t(__pyx_v_fsn); if (unlikely((__pyx_t_7 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 14633, __pyx_L1_error)
  __pyx_v_c_fsn = __pyx_t_7;
+14634:         c_timeout_millis = timeout_millis
  __pyx_t_7 = __Pyx_PyLong_As_uint64_t(__pyx_v_timeout_millis); if (unlikely((__pyx_t_7 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 14634, __pyx_L1_error)
  __pyx_v_c_timeout_millis = __pyx_t_7;
+14635:         self._lock_enter('await_acked_fsn')
  __pyx_t_8 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_lock_enter(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_await_acked_fsn); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14635, __pyx_L1_error)
+14636:         try:
  /*try:*/ {
+14637:             self._check_open('await_acked_fsn')
    __pyx_t_8 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_await_acked_fsn); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14637, __pyx_L12_error)
+14638:             handle = self._enter_call_locked()
    __pyx_t_4 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14638, __pyx_L12_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_4);
    __pyx_t_4 = 0;
+14639:             try:
    /*try:*/ {
+14640:                 if not qwp_sender_acked_fsn(self._qwp, &acked, &err):
      __pyx_t_1 = (!qwp_sender_acked_fsn(__pyx_v_self->_qwp, (&__pyx_v_acked), (&__pyx_v_err)));
      if (unlikely(__pyx_t_1)) {
/* … */
      }
+14641:                     raise c_err_to_py(err)
        __pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14641, __pyx_L15_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(0, 14641, __pyx_L15_error)
+14642:                 if acked.has_value and acked.value >= c_fsn:
      __pyx_t_2 = (__pyx_v_acked.has_value != 0);
      if (__pyx_t_2) {
      } else {
        __pyx_t_1 = __pyx_t_2;
        goto __pyx_L19_bool_binop_done;
      }
      __pyx_t_2 = (__pyx_v_acked.value >= __pyx_v_c_fsn);
      __pyx_t_1 = __pyx_t_2;
      __pyx_L19_bool_binop_done:;
      if (__pyx_t_1) {
/* … */
      }
+14643:                     return True
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(Py_True);
        __pyx_r = Py_True;
        goto __pyx_L14_return;
 14644:                 # The barrier drains every frame published so far (a
 14645:                 # superset of ``fsn``); a no-progress expiry surfaces as
 14646:                 # FailoverRetry.
+14647:                 _ensure_doesnt_have_gil(&gs)
      (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+14648:                 ok = qwp_sender_wait(
      __pyx_v_ok = qwp_sender_wait(__pyx_v_self->_qwp, qwpws_ack_level_ok, __pyx_v_c_timeout_millis, (&__pyx_v_err));
 14649:                     self._qwp,
 14650:                     qwpws_ack_level.qwpws_ack_level_ok,
 14651:                     c_timeout_millis,
 14652:                     &err)
+14653:                 _ensure_has_gil(&gs)
      __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+14654:                 if not ok:
      __pyx_t_1 = (!__pyx_v_ok);
      if (__pyx_t_1) {
/* … */
      }
+14655:                     if line_sender_error_get_code(err) != \
        __pyx_t_1 = (line_sender_error_get_code(__pyx_v_err) != line_sender_error_failover_retry);
        if (unlikely(__pyx_t_1)) {
/* … */
        }
 14656:                             line_sender_error_failover_retry:
+14657:                         raise c_err_to_py(err)
          __pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14657, __pyx_L15_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(0, 14657, __pyx_L15_error)
+14658:                     line_sender_error_free(err)
        line_sender_error_free(__pyx_v_err);
+14659:                     err = NULL
        __pyx_v_err = NULL;
 14660:                 # Re-read the watermark: the wait either drained ``fsn``
 14661:                 # or expired with no progress; the current ack level is
 14662:                 # the answer.
+14663:                 if not qwp_sender_acked_fsn(self._qwp, &acked, &err):
      __pyx_t_1 = (!qwp_sender_acked_fsn(__pyx_v_self->_qwp, (&__pyx_v_acked), (&__pyx_v_err)));
      if (unlikely(__pyx_t_1)) {
/* … */
      }
+14664:                     raise c_err_to_py(err)
        __pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14664, __pyx_L15_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(0, 14664, __pyx_L15_error)
+14665:                 return bool(acked.has_value and acked.value >= c_fsn)
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_5 = NULL;
      if (__pyx_v_acked.has_value) {
      } else {
        __pyx_t_10 = __Pyx_PyLong_From_bool(__pyx_v_acked.has_value); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 14665, __pyx_L15_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_9 = __pyx_t_10;
        __pyx_t_10 = 0;
        goto __pyx_L24_bool_binop_done;
      }
      __pyx_t_1 = (__pyx_v_acked.value >= __pyx_v_c_fsn);
      __pyx_t_10 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 14665, __pyx_L15_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_9 = __pyx_t_10;
      __pyx_t_10 = 0;
      __pyx_L24_bool_binop_done:;
      __pyx_t_6 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_9};
        __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, __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_9); __pyx_t_9 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14665, __pyx_L15_error)
        __Pyx_GOTREF((PyObject *)__pyx_t_4);
      }
      __pyx_r = ((PyObject *)__pyx_t_4);
      __pyx_t_4 = 0;
      goto __pyx_L14_return;
    }
 14666:             finally:
+14667:                 self._exit_call_locked(handle)
    /*finally:*/ {
      __pyx_L15_error:;
      /*exception exit:*/{
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
         __Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
        if ( unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
        __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_XGOTREF(__pyx_t_19);
        __pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
        {
          ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14667, __pyx_L27_error)
        }
        __Pyx_XGIVEREF(__pyx_t_17);
        __Pyx_XGIVEREF(__pyx_t_18);
        __Pyx_XGIVEREF(__pyx_t_19);
        __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_XGIVEREF(__pyx_t_15);
        __Pyx_XGIVEREF(__pyx_t_16);
        __Pyx_ErrRestore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
        __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
        __pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
        goto __pyx_L12_error;
        __pyx_L27_error:;
        __Pyx_XGIVEREF(__pyx_t_17);
        __Pyx_XGIVEREF(__pyx_t_18);
        __Pyx_XGIVEREF(__pyx_t_19);
        __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
        __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
        goto __pyx_L12_error;
      }
      __pyx_L14_return: {
        __pyx_t_19 = __pyx_r;
        __pyx_r = 0;
        ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14667, __pyx_L12_error)
        __pyx_r = __pyx_t_19;
        __pyx_t_19 = 0;
        goto __pyx_L11_return;
      }
    }
  }
 14668:         finally:
+14669:             self._lock.release()
  /*finally:*/ {
    __pyx_L12_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_16, &__pyx_t_15, &__pyx_t_14);
      if ( unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17);
      __Pyx_XGOTREF(__pyx_t_19);
      __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_t_12 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_20 = __pyx_filename;
      {
        __pyx_t_9 = __pyx_v_self->_lock;
        __Pyx_INCREF(__pyx_t_9);
        __pyx_t_6 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_9, NULL};
          __pyx_t_4 = __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_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14669, __pyx_L29_error)
          __Pyx_GOTREF(__pyx_t_4);
        }
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      }
      __Pyx_XGIVEREF(__pyx_t_16);
      __Pyx_XGIVEREF(__pyx_t_15);
      __Pyx_XGIVEREF(__pyx_t_14);
      __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_15, __pyx_t_14);
      __Pyx_XGIVEREF(__pyx_t_19);
      __Pyx_XGIVEREF(__pyx_t_18);
      __Pyx_XGIVEREF(__pyx_t_17);
      __Pyx_ErrRestore(__pyx_t_19, __pyx_t_18, __pyx_t_17);
      __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0;
      __pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_20;
      goto __pyx_L1_error;
      __pyx_L29_error:;
      __Pyx_XGIVEREF(__pyx_t_16);
      __Pyx_XGIVEREF(__pyx_t_15);
      __Pyx_XGIVEREF(__pyx_t_14);
      __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_15, __pyx_t_14);
      __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
      __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
      __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
      __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L11_return: {
      __pyx_t_14 = __pyx_r;
      __pyx_r = 0;
      __pyx_t_9 = __pyx_v_self->_lock;
      __Pyx_INCREF(__pyx_t_9);
      __pyx_t_6 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_9, NULL};
        __pyx_t_4 = __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_9); __pyx_t_9 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14669, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_r = __pyx_t_14;
      __pyx_t_14 = 0;
      goto __pyx_L0;
    }
  }
 14670: 
+14671:     def close(self, flush: bool=True, wait: bool=False):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_29close(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledSender_28close, "\n        Return this sender to its pool. Idempotent.\n\n        Pending rows are published by default; delivery is owned by the\n        store-and-forward queue, which keeps delivering after the sender\n        is returned. ``wait=True`` additionally waits for an OK ack before\n        returning the sender to the pool; without it, a later server\n        rejection of this lease's rows is reported through the pool's\n        ``error_handler`` (default: the ``questdb`` logger).\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledSender_29close = {"close", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledSender_29close, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledSender_28close};
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_29close(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
) {
  PyLongObject *__pyx_v_flush = 0;
  PyLongObject *__pyx_v_wait = 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_flush,&__pyx_mstate_global->__pyx_n_u_wait,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(0, 14671, __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(0, 14671, __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(0, 14671, __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(0, 14671, __pyx_L3_error)
      if (!values[0]) values[0] = __Pyx_NewRef((PyObject *)((PyLongObject *)Py_True));
      if (!values[1]) values[1] = __Pyx_NewRef((PyObject *)((PyLongObject *)Py_False));
    } else {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 14671, __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(0, 14671, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[0]) values[0] = __Pyx_NewRef((PyObject *)((PyLongObject *)Py_True));
      if (!values[1]) values[1] = __Pyx_NewRef((PyObject *)((PyLongObject *)Py_False));
    }
    __pyx_v_flush = ((PyLongObject *)values[0]);
    __pyx_v_wait = ((PyLongObject *)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("close", 0, 0, 2, __pyx_nargs); __PYX_ERR(0, 14671, __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.PooledSender.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_flush), __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, 0, "flush", 0))) __PYX_ERR(0, 14671, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_wait), __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool, 0, "wait", 0))) __PYX_ERR(0, 14671, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_28close(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self), __pyx_v_flush, __pyx_v_wait);

  /* 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_12PooledSender_28close(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, PyLongObject *__pyx_v_flush, PyLongObject *__pyx_v_wait) {
  struct __pyx_obj_7questdb_7_client_QuestDB *__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_2);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_AddTraceback("questdb._client.PooledSender.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_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14671, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_flush, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(0, 14671, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_wait, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(0, 14671, __pyx_L1_error)
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_29close, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender_close, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[261])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 14671, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_17, __pyx_mstate_global->__pyx_tuple[57]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_17, __pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_close, __pyx_t_17) < (0)) __PYX_ERR(0, 14671, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 14672:         """
 14673:         Return this sender to its pool. Idempotent.
 14674: 
 14675:         Pending rows are published by default; delivery is owned by the
 14676:         store-and-forward queue, which keeps delivering after the sender
 14677:         is returned. ``wait=True`` additionally waits for an OK ack before
 14678:         returning the sender to the pool; without it, a later server
 14679:         rejection of this lease's rows is reported through the pool's
 14680:         ``error_handler`` (default: the ``questdb`` logger).
 14681:         """
 14682:         cdef QuestDB handle
+14683:         self._lock_enter('close')
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_lock_enter(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_close); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14683, __pyx_L1_error)
+14684:         try:
  /*try:*/ {
 14685:             # A part-way-through row is the sharper diagnosis and names
 14686:             # the buffer, so it is asked first; the broader "inside one
 14687:             # of this lease's own calls" answers everything else.
+14688:             self._check_not_in_row('close')
    __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_not_in_row(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_close); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14688, __pyx_L4_error)
+14689:             self._check_not_mid_call('close')
    __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_check_not_mid_call(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_close); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14689, __pyx_L4_error)
+14690:             handle = self._enter_call_locked()
    __pyx_t_2 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14690, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_2);
    __pyx_t_2 = 0;
+14691:             try:
    /*try:*/ {
+14692:                 try:
      /*try:*/ {
+14693:                     if flush and self._qwp != NULL:
        __pyx_t_4 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_flush)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 14693, __pyx_L10_error)
        if (__pyx_t_4) {
        } else {
          __pyx_t_3 = __pyx_t_4;
          goto __pyx_L13_bool_binop_done;
        }
        __pyx_t_4 = (__pyx_v_self->_qwp != NULL);
        __pyx_t_3 = __pyx_t_4;
        __pyx_L13_bool_binop_done:;
        if (__pyx_t_3) {
/* … */
        }
      }
+14694:                         self._flush_locked(wait)
          __pyx_t_3 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_wait)); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 14694, __pyx_L10_error)
          __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_flush_locked(__pyx_v_self, __pyx_t_3); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14694, __pyx_L10_error)
 14695:                 finally:
+14696:                     self._release_locked()
      /*finally:*/ {
        /*normal exit:*/{
          ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_release_locked(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14696, __pyx_L7_error)
          goto __pyx_L11;
        }
        __pyx_L10_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
           __Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
          if ( unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
          __Pyx_XGOTREF(__pyx_t_8);
          __Pyx_XGOTREF(__pyx_t_9);
          __Pyx_XGOTREF(__pyx_t_10);
          __Pyx_XGOTREF(__pyx_t_11);
          __Pyx_XGOTREF(__pyx_t_12);
          __Pyx_XGOTREF(__pyx_t_13);
          __pyx_t_5 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_7 = __pyx_filename;
          {
            ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_release_locked(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14696, __pyx_L16_error)
          }
          __Pyx_XGIVEREF(__pyx_t_11);
          __Pyx_XGIVEREF(__pyx_t_12);
          __Pyx_XGIVEREF(__pyx_t_13);
          __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
          __Pyx_XGIVEREF(__pyx_t_8);
          __Pyx_XGIVEREF(__pyx_t_9);
          __Pyx_XGIVEREF(__pyx_t_10);
          __Pyx_ErrRestore(__pyx_t_8, __pyx_t_9, __pyx_t_10);
          __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
          __pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_7;
          goto __pyx_L7_error;
          __pyx_L16_error:;
          __Pyx_XGIVEREF(__pyx_t_11);
          __Pyx_XGIVEREF(__pyx_t_12);
          __Pyx_XGIVEREF(__pyx_t_13);
          __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
          __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;
          __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
          goto __pyx_L7_error;
        }
        __pyx_L11:;
      }
    }
 14697:             finally:
+14698:                 self._exit_call_locked(handle)
    /*finally:*/ {
      /*normal exit:*/{
        ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14698, __pyx_L4_error)
        goto __pyx_L8;
      }
      __pyx_L7_error:;
      /*exception exit:*/{
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
         __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8);
        if ( unlikely(__Pyx_GetException(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11);
        __Pyx_XGOTREF(__pyx_t_13);
        __Pyx_XGOTREF(__pyx_t_12);
        __Pyx_XGOTREF(__pyx_t_11);
        __Pyx_XGOTREF(__pyx_t_10);
        __Pyx_XGOTREF(__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_8);
        __pyx_t_6 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_14 = __pyx_filename;
        {
          ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14698, __pyx_L18_error)
        }
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_9, __pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_ErrRestore(__pyx_t_13, __pyx_t_12, __pyx_t_11);
        __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0;
        __pyx_lineno = __pyx_t_6; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_14;
        goto __pyx_L4_error;
        __pyx_L18_error:;
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_9, __pyx_t_8);
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0;
        goto __pyx_L4_error;
      }
      __pyx_L8:;
    }
  }
 14699:         finally:
+14700:             self._lock.release()
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_15 = __pyx_v_self->_lock;
      __Pyx_INCREF(__pyx_t_15);
      __pyx_t_16 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_15, NULL};
        __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_16, (1-__pyx_t_16) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14700, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
      if ( unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __pyx_t_5 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_17 = __pyx_filename;
      {
        __pyx_t_15 = __pyx_v_self->_lock;
        __Pyx_INCREF(__pyx_t_15);
        __pyx_t_16 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_15, NULL};
          __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_16, (1-__pyx_t_16) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14700, __pyx_L20_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_ErrRestore(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      __pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_17;
      goto __pyx_L1_error;
      __pyx_L20_error:;
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      __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;
      __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }
 14701: 
+14702:     def __exit__(self, exc_type, exc_val, exc_tb):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_31__exit__(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_12PooledSender_31__exit__ = {"__exit__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledSender_31__exit__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_12PooledSender_31__exit__(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_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_exc_type,&__pyx_mstate_global->__pyx_n_u_exc_val,&__pyx_mstate_global->__pyx_n_u_exc_tb,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(0, 14702, __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(0, 14702, __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(0, 14702, __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(0, 14702, __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(0, 14702, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, i); __PYX_ERR(0, 14702, __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(0, 14702, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 14702, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 14702, __pyx_L3_error)
    }
    __pyx_v_exc_type = values[0];
    __pyx_v_exc_val = values[1];
    __pyx_v_exc_tb = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 14702, __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.PooledSender.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_12PooledSender_30__exit__(((struct __pyx_obj_7questdb_7_client_PooledSender *)__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_12PooledSender_30__exit__(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self, 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_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_4);
  __Pyx_AddTraceback("questdb._client.PooledSender.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledSender_31__exit__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledSender___exit, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[262])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 14702, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledSender, __pyx_mstate_global->__pyx_n_u_exit, __pyx_t_17) < (0)) __PYX_ERR(0, 14702, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+14703:         self.close(exc_type is None, False)
  __pyx_t_2 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = (__pyx_v_exc_type == Py_None);
  __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14703, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_4, Py_False};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_close, __pyx_callargs+__pyx_t_5, (3-__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(0, 14703, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 14704: 
+14705:     def __dealloc__(self):
/* Python wrapper */
static void __pyx_pw_7questdb_7_client_12PooledSender_33__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7questdb_7_client_12PooledSender_33__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_12PooledSender_32__dealloc__(((struct __pyx_obj_7questdb_7_client_PooledSender *)__pyx_v_self));

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

static void __pyx_pf_7questdb_7_client_12PooledSender_32__dealloc__(struct __pyx_obj_7questdb_7_client_PooledSender *__pyx_v_self) {
  size_t __pyx_v_discarded;
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_WriteUnraisable("questdb._client.PooledSender.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}
+14706:         cdef size_t discarded = 0
  __pyx_v_discarded = 0;
+14707:         if self._lock is None:
  __pyx_t_1 = (__pyx_v_self->_lock == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+14708:             return
    goto __pyx_L0;
+14709:         with self._lock:
  /*with:*/ {
    __pyx_t_2 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14709, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = NULL;
    __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14709, __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(0, 14709, __pyx_L4_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_L13_try_end;
        __pyx_L8_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.PooledSender.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_5, &__pyx_t_4) < 0) __PYX_ERR(0, 14709, __pyx_L10_except_error)
          __Pyx_XGOTREF(__pyx_t_3);
          __Pyx_XGOTREF(__pyx_t_5);
          __Pyx_XGOTREF(__pyx_t_4);
          __pyx_t_11 = PyTuple_Pack(3, __pyx_t_3, __pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 14709, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_11, NULL);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 14709, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          if (__pyx_t_1 < (0)) __PYX_ERR(0, 14709, __pyx_L10_except_error)
          __pyx_t_10 = (!__pyx_t_1);
          if (unlikely(__pyx_t_10)) {
            __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(0, 14709, __pyx_L10_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_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_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);
        __pyx_L13_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(0, 14709, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        }
        goto __pyx_L7;
      }
      __pyx_L7:;
    }
    goto __pyx_L20;
    __pyx_L4_error:;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L1_error;
    __pyx_L20:;
  }
+14710:             if self._qwp != NULL and self._buffer is not None:
          __pyx_t_10 = (__pyx_v_self->_qwp != NULL);
          if (__pyx_t_10) {
          } else {
            __pyx_t_1 = __pyx_t_10;
            goto __pyx_L15_bool_binop_done;
          }
          __pyx_t_10 = (((PyObject *)__pyx_v_self->_buffer) != Py_None);
          __pyx_t_1 = __pyx_t_10;
          __pyx_L15_bool_binop_done:;
          if (__pyx_t_1) {
/* … */
          }
+14711:                 discarded = line_sender_buffer_row_count(self._buffer._impl)
            __pyx_v_discarded = line_sender_buffer_row_count(__pyx_v_self->_buffer->_impl);
+14712:             self._release_locked()
          ((struct __pyx_vtabstruct_7questdb_7_client_PooledSender *)__pyx_v_self->__pyx_vtab)->_release_locked(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14712, __pyx_L8_error)
+14713:         if discarded != 0:
  __pyx_t_10 = (__pyx_v_discarded != 0);
  if (__pyx_t_10) {
/* … */
  }
+14714:             _log_discarded_lease_rows(discarded)
    __pyx_f_7questdb_7_client__log_discarded_lease_rows(__pyx_v_discarded);
 14715: 
 14716: 
+14717: cdef void _log_discarded_lease_rows(size_t rows) noexcept:
static void __pyx_f_7questdb_7_client__log_discarded_lease_rows(size_t __pyx_v_rows) {
/* … */
  /* 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_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_WriteUnraisable("questdb._client._log_discarded_lease_rows", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}
 14718:     """Report the rows a lease collected without ``close()`` took with it.
 14719: 
 14720:     Called from ``PooledSender.__dealloc__``, which cannot flush them: a
 14721:     lease reaches it only once nothing refers to it, often during garbage
 14722:     collection or interpreter exit. Without this record the rows would
 14723:     vanish with nothing said. Deallocation cannot report an error either,
 14724:     so a logging handler that raises, or a ``logging`` module already
 14725:     torn down at interpreter exit, costs the record and nothing else.
 14726:     """
+14727:     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_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 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:;
  }
+14728:         logging.getLogger('questdb').warning(
      __pyx_t_7 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_logging); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 14728, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_getLogger); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 14728, __pyx_L3_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_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, __pyx_mstate_global->__pyx_n_u_questdb};
        __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_10, (2-__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_6)) __PYX_ERR(0, 14728, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_6);
      }
      __pyx_t_5 = __pyx_t_6;
      __Pyx_INCREF(__pyx_t_5);
 14729:             'questdb: a PooledSender lease was garbage-collected without '
 14730:             'close(), discarding %d buffered row(s) that were never sent. '
 14731:             'Close every lease, or use it in a `with` block, so that its '
 14732:             'rows are flushed.',
+14733:             rows)
      __pyx_t_9 = __Pyx_PyLong_FromSize_t(__pyx_v_rows); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 14733, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = 0;
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_questdb_a_PooledSender_lease_was, __pyx_t_9};
        __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_warning, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (1*__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_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14728, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+14734:     except BaseException:
    __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
    if (__pyx_t_11) {
      __Pyx_ErrRestore(0,0,0);
      goto __pyx_L4_exception_handled;
    }
    goto __pyx_L5_except_error;
 14735:         pass
 14736: 
 14737: 
+14738: @cython.no_gc_clear
struct __pyx_obj_7questdb_7_client_PooledReader {
  PyObject_HEAD
  struct __pyx_vtabstruct_7questdb_7_client_PooledReader *__pyx_vtab;
  struct __pyx_obj_7questdb_7_client_QuestDB *_handle;
  struct __pyx_obj_7questdb_7_client__ReaderHandle *_reader;
  struct __pyx_obj_7questdb_7_client__CursorHandle *_last_cursor;
  PyObject *_lock;
  int _query_in_flight;
  unsigned long _query_thread;
  int64_t _call_depth;
};
/* … */
struct __pyx_vtabstruct_7questdb_7_client_PooledReader {
  void (*_attach)(struct __pyx_obj_7questdb_7_client_PooledReader *, struct __pyx_obj_7questdb_7_client_QuestDB *, struct __pyx_obj_7questdb_7_client__ReaderHandle *);
  int (*_query_blocks)(struct __pyx_obj_7questdb_7_client_PooledReader *);
  __pyx_t_7questdb_7_client_void_int (*_check_open)(struct __pyx_obj_7questdb_7_client_PooledReader *, PyObject *);
  struct __pyx_obj_7questdb_7_client_QuestDB *(*_enter_call_locked)(struct __pyx_obj_7questdb_7_client_PooledReader *);
  void (*_exit_call_locked)(struct __pyx_obj_7questdb_7_client_PooledReader *, struct __pyx_obj_7questdb_7_client_QuestDB *);
  __pyx_t_7questdb_7_client_void_int (*_check_not_mid_call)(struct __pyx_obj_7questdb_7_client_PooledReader *, PyObject *);
  void (*_release_locked)(struct __pyx_obj_7questdb_7_client_PooledReader *);
  void (*_release_finalizer_locked)(struct __pyx_obj_7questdb_7_client_PooledReader *);
};
static struct __pyx_vtabstruct_7questdb_7_client_PooledReader *__pyx_vtabptr_7questdb_7_client_PooledReader;

 14739: cdef class PooledReader:
 14740:     """
 14741:     A reader lease borrowed from a :class:`QuestDB` pool.
 14742: 
 14743:     The read-side twin of :meth:`QuestDB.sender`: obtain a lease with
 14744:     :meth:`QuestDB.reader`; it holds one pooled reader connection for
 14745:     its lifetime and runs queries on it sequentially via :meth:`query`.
 14746:     ``close()`` (or leaving the ``with`` block) releases the
 14747:     connection: back to the pool if the last query reached its terminal
 14748:     on a live connection (a clean drain, a successful ``cancel()``, or a
 14749:     server-side error such as a parse error or a query timeout), dropped
 14750:     otherwise.
 14751: 
 14752:     Queries are strictly sequential — one result at a time. Fully drain
 14753:     (or ``close()``) each :class:`QueryResult` before calling
 14754:     :meth:`query` again; running the next query while the previous
 14755:     result is still open raises ``QuestDBError``. Closing an undrained
 14756:     result terminates the lease; call ``result.cancel()`` before
 14757:     ``result.close()`` to preserve it.
 14758: 
 14759:     Because every query shares one connection, passing
 14760:     ``reset_symbol_dict=False`` to follow-up queries keeps the
 14761:     connection's SYMBOL dictionary warm across them instead of
 14762:     resetting it per query.
 14763: 
 14764:     The lease counts as an active use of the :class:`QuestDB` handle
 14765:     (``QuestDB.close()`` waits for it) and has thread affinity: use one
 14766:     lease per thread, on the thread that created it. A
 14767:     :class:`QueryResult` returned by the lease may be handed to a worker
 14768:     under that result's thread hand-off rules; wait for it to finish
 14769:     before using the lease again.
 14770:     """
 14771:     cdef QuestDB _handle
 14772:     cdef _ReaderHandle _reader
 14773:     cdef _CursorHandle _last_cursor
 14774:     cdef object _lock
 14775:     cdef bint _query_in_flight
 14776:     # The thread whose query is in flight. See `_query_blocks`.
 14777:     cdef unsigned long _query_thread
 14778:     cdef int64_t _call_depth
 14779: 
+14780:     def __cinit__(self):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_12PooledReader_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7questdb_7_client_12PooledReader_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_12PooledReader___cinit__(((struct __pyx_obj_7questdb_7_client_PooledReader *)__pyx_v_self));

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

static int __pyx_pf_7questdb_7_client_12PooledReader___cinit__(struct __pyx_obj_7questdb_7_client_PooledReader *__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.PooledReader.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+14781:         self._handle = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_handle);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_handle);
  __pyx_v_self->_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)Py_None);
+14782:         self._reader = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_reader);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_reader);
  __pyx_v_self->_reader = ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)Py_None);
+14783:         self._last_cursor = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_last_cursor);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_last_cursor);
  __pyx_v_self->_last_cursor = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)Py_None);
+14784:         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(0, 14784, __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(0, 14784, __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(0, 14784, __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;
+14785:         self._query_in_flight = False
  __pyx_v_self->_query_in_flight = 0;
+14786:         self._query_thread = 0
  __pyx_v_self->_query_thread = 0;
+14787:         self._call_depth = 0
  __pyx_v_self->_call_depth = 0;
 14788: 
+14789:     cdef void _attach(
static void __pyx_f_7questdb_7_client_12PooledReader__attach(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self, struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle, struct __pyx_obj_7questdb_7_client__ReaderHandle *__pyx_v_reader) {
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
}
 14790:             self,
 14791:             QuestDB handle,
 14792:             _ReaderHandle reader) noexcept:
+14793:         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;
+14794:         self._reader = reader
  __Pyx_INCREF((PyObject *)__pyx_v_reader);
  __Pyx_GIVEREF((PyObject *)__pyx_v_reader);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_reader);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_reader);
  __pyx_v_self->_reader = __pyx_v_reader;
 14795: 
+14796:     cdef bint _query_blocks(self) except -1:
static int __pyx_f_7questdb_7_client_12PooledReader__query_blocks(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client.PooledReader._query_blocks", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}
 14797:         """Whether a query in flight on this lease refuses a call outright.
 14798: 
 14799:         A query runs the caller's Python on its own thread before the native
 14800:         call starts -- `_bind_query_params` reads `value.bytes` off every bind
 14801:         value -- and what that code calls back into is answered by the lease's
 14802:         own rules: `close()` is refused as re-entry (`_check_not_mid_call`), a
 14803:         second query is refused by the reader, and `__enter__` hands the lease
 14804:         back. Python that runs while the native call itself is in progress --
 14805:         an OIDC callback on the querying thread -- and any call from another
 14806:         thread are refused here instead.
 14807:         """
+14808:         if not self._query_in_flight:
  __pyx_t_1 = (!__pyx_v_self->_query_in_flight);
  if (__pyx_t_1) {
/* … */
  }
+14809:             return False
    __pyx_r = 0;
    goto __pyx_L0;
+14810:         if self._query_thread != PyThread_get_thread_ident():
  __pyx_t_1 = (__pyx_v_self->_query_thread != PyThread_get_thread_ident());
  if (__pyx_t_1) {
/* … */
  }
+14811:             return True
    __pyx_r = 1;
    goto __pyx_L0;
+14812:         return _oidc_callback_on_this_thread()
  __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_callback_on_this_thread(); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 14812, __pyx_L1_error)
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 14813: 
+14814:     cdef void_int _check_open(self, str method) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_12PooledReader__check_open(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self, PyObject *__pyx_v_method) {
  __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_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_AddTraceback("questdb._client.PooledReader._check_open", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+14815:         if self._query_blocks():
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_query_blocks(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 14815, __pyx_L1_error)
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+14816:             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(0, 14816, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+14817:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14817, __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(0, 14817, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+14818:                 f"{method}() can't be called during a reader query.")
    __pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14818, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_during_a_reader); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 14818, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_8 = 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_8 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_t_7};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__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_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14816, __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(0, 14816, __pyx_L1_error)
+14819:         if self._reader is None:
  __pyx_t_1 = (((PyObject *)__pyx_v_self->_reader) == Py_None);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+14820:             raise QuestDBError(
    __pyx_t_4 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 14820, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
+14821:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14821, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14821, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+14822:                 f"{method}() can't be called: the reader lease is closed.")
    __pyx_t_6 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14822, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_6, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_the_reader_leas); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14822, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __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_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_8 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_3, __pyx_t_5};
      __pyx_t_2 = __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_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 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(0, 14820, __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(0, 14820, __pyx_L1_error)
 14823: 
+14824:     cdef QuestDB _enter_call_locked(self):
static struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_f_7questdb_7_client_12PooledReader__enter_call_locked(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self) {
  struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0;
  struct __pyx_obj_7questdb_7_client_QuestDB *__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_AddTraceback("questdb._client.PooledReader._enter_call_locked", __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;
}
 14825:         """Count one of this lease's own calls, on the lease and on the
 14826:         handle it was borrowed from. Called with `self._lock` held.
 14827: 
 14828:         The mirror of `PooledSender._enter_call_locked`, and for the same
 14829:         two reasons: `QuestDB.close()` has to be able to see that the
 14830:         frame it would wait for is its own caller, and `close()` here has
 14831:         to be able to tell a call on *this* lease from a call somewhere
 14832:         else on the handle.
 14833: 
 14834:         A query runs the caller's Python while it holds the lease --
 14835:         `_bind_query_params` reads `value.bytes` off every bind parameter
 14836:         it is handed -- so this is the read side's re-entrancy window.
 14837:         """
+14838:         cdef QuestDB handle = self._handle
  __pyx_t_1 = ((PyObject *)__pyx_v_self->_handle);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_1);
  __pyx_t_1 = 0;
+14839:         self._call_depth += 1
  __pyx_v_self->_call_depth = (__pyx_v_self->_call_depth + 1);
+14840:         if handle is not None:
  __pyx_t_2 = (((PyObject *)__pyx_v_handle) != Py_None);
  if (__pyx_t_2) {
/* … */
  }
+14841:             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_L9_try_end;
      __pyx_L4_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
      __pyx_L6_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_L9_try_end:;
    }
+14842:                 handle._enter_scoped_call()
        ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_handle->__pyx_vtab)->_enter_scoped_call(__pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14842, __pyx_L4_error)
+14843:             except:
      /*except:*/ {
        __Pyx_AddTraceback("questdb._client.PooledReader._enter_call_locked", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(0, 14843, __pyx_L6_except_error)
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_7);
+14844:                 self._call_depth -= 1
        __pyx_v_self->_call_depth = (__pyx_v_self->_call_depth - 1);
+14845:                 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(0, 14845, __pyx_L6_except_error)
      }
+14846:         return handle
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_handle);
  __pyx_r = __pyx_v_handle;
  goto __pyx_L0;
 14847: 
+14848:     cdef void _exit_call_locked(self, QuestDB handle) except *:
static void __pyx_f_7questdb_7_client_12PooledReader__exit_call_locked(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self, struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle) {
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client.PooledReader._exit_call_locked", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
}
 14849:         # The handle's thread-local update can raise; this lease is no longer
 14850:         # in its call either way, so unwind its guard first.
+14851:         self._call_depth -= 1
  __pyx_v_self->_call_depth = (__pyx_v_self->_call_depth - 1);
+14852:         if handle is not None:
  __pyx_t_1 = (((PyObject *)__pyx_v_handle) != Py_None);
  if (__pyx_t_1) {
/* … */
  }
+14853:             handle._exit_scoped_call()
    ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_handle->__pyx_vtab)->_exit_scoped_call(__pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14853, __pyx_L1_error)
 14854: 
+14855:     cdef void_int _check_not_mid_call(self, str method) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_12PooledReader__check_not_mid_call(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self, PyObject *__pyx_v_method) {
  __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_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_AddTraceback("questdb._client.PooledReader._check_not_mid_call", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 14856:         """
 14857:         Refuse a call that would end this lease while one of its own
 14858:         calls is still running: the reader connection would go back to
 14859:         the pool with the call still reading from it.
 14860:         """
+14861:         if self._call_depth != 0:
  __pyx_t_1 = (__pyx_v_self->_call_depth != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+14862:             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(0, 14862, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+14863:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14863, __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(0, 14863, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+14864:                 f"{method}() can't be called from inside a call on this "
    __pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14864, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_can_t_be_called_from_inside_a_c_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 14864, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_8 = 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_8 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_t_7};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__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_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14862, __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(0, 14862, __pyx_L1_error)
 14865:                 'reader lease. It would release the connection while '
 14866:                 'that call is still using it. Close the lease after the '
 14867:                 'call returns.')
 14868: 
+14869:     cdef void _release_locked(self) except *:
static void __pyx_f_7questdb_7_client_12PooledReader__release_locked(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self) {
  struct __pyx_obj_7questdb_7_client__ReaderHandle *__pyx_v_reader = 0;
  struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_last = 0;
  struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0;
/* … */
  /* function exit code */
  goto __pyx_L0;
  __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_AddTraceback("questdb._client.PooledReader._release_locked", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_reader);
  __Pyx_XDECREF((PyObject *)__pyx_v_last);
  __Pyx_XDECREF((PyObject *)__pyx_v_handle);
  __Pyx_RefNannyFinishContext();
}
+14870:         cdef _ReaderHandle reader = self._reader
  __pyx_t_1 = ((PyObject *)__pyx_v_self->_reader);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_reader = ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)__pyx_t_1);
  __pyx_t_1 = 0;
+14871:         cdef _CursorHandle last = self._last_cursor
  __pyx_t_1 = ((PyObject *)__pyx_v_self->_last_cursor);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_last = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_1);
  __pyx_t_1 = 0;
+14872:         cdef QuestDB handle = self._handle
  __pyx_t_1 = ((PyObject *)__pyx_v_self->_handle);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_1);
  __pyx_t_1 = 0;
+14873:         if self._query_blocks():
  __pyx_t_2 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_query_blocks(__pyx_v_self); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 14873, __pyx_L1_error)
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+14874:             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(0, 14874, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+14875:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14875, __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(0, 14875, __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_PooledReader_close_cannot_releas};
      __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(0, 14874, __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(0, 14874, __pyx_L1_error)
 14876:                 'PooledReader.close() cannot release a reader during a query.')
+14877:         if last is not None:
  __pyx_t_2 = (((PyObject *)__pyx_v_last) != Py_None);
  if (__pyx_t_2) {
/* … */
  }
+14878:             last._check_not_driving('PooledReader.close', check_lock=True)
    __pyx_t_9.__pyx_n = 1;
    __pyx_t_9.check_lock = 1;
    __pyx_t_8 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_last->__pyx_vtab)->_check_not_driving(__pyx_v_last, __pyx_mstate_global->__pyx_kp_u_PooledReader_close, &__pyx_t_9); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14878, __pyx_L1_error)
+14879:         if reader is None:
  __pyx_t_2 = (((PyObject *)__pyx_v_reader) == Py_None);
  if (__pyx_t_2) {
/* … */
  }
+14880:             return
    goto __pyx_L0;
+14881:         self._reader = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_reader);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_reader);
  __pyx_v_self->_reader = ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)Py_None);
+14882:         self._last_cursor = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_last_cursor);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_last_cursor);
  __pyx_v_self->_last_cursor = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)Py_None);
+14883:         self._handle = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_handle);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_handle);
  __pyx_v_self->_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)Py_None);
+14884:         try:
  /*try:*/ {
+14885:             if last is not None:
    __pyx_t_2 = (((PyObject *)__pyx_v_last) != Py_None);
    if (__pyx_t_2) {
/* … */
    }
  }
+14886:                 last._close()
      __pyx_t_10 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_last->__pyx_vtab)->_close(__pyx_v_last); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 14886, __pyx_L7_error)
 14887:         finally:
+14888:             if last is not None and last._cursor != NULL:
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_11 = (((PyObject *)__pyx_v_last) != Py_None);
      if (__pyx_t_11) {
      } else {
        __pyx_t_2 = __pyx_t_11;
        goto __pyx_L11_bool_binop_done;
      }
      __pyx_t_11 = (__pyx_v_last->_cursor != NULL);
      __pyx_t_2 = __pyx_t_11;
      __pyx_L11_bool_binop_done:;
      if (__pyx_t_2) {
/* … */
      }
/* … */
        __pyx_t_11 = (((PyObject *)__pyx_v_last) != Py_None);
        if (__pyx_t_11) {
        } else {
          __pyx_t_2 = __pyx_t_11;
          goto __pyx_L18_bool_binop_done;
        }
        __pyx_t_11 = (__pyx_v_last->_cursor != NULL);
        __pyx_t_2 = __pyx_t_11;
        __pyx_L18_bool_binop_done:;
        if (__pyx_t_2) {
/* … */
        }
 14889:                 # Deferred or interrupted: whoever frees the cursor closes
 14890:                 # the reader.
+14891:                 last._owns_reader = True
        __pyx_v_last->_owns_reader = 1;
/* … */
          __pyx_v_last->_owns_reader = 1;
+14892:                 reader = None
        __Pyx_INCREF(Py_None);
        __Pyx_DECREF_SET(__pyx_v_reader, ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)Py_None));
/* … */
          __Pyx_INCREF(Py_None);
          __Pyx_DECREF_SET(__pyx_v_reader, ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)Py_None));
+14893:             if reader is not None:
      __pyx_t_2 = (((PyObject *)__pyx_v_reader) != Py_None);
      if (__pyx_t_2) {
/* … */
      }
/* … */
        __pyx_t_2 = (((PyObject *)__pyx_v_reader) != Py_None);
        if (__pyx_t_2) {
/* … */
        }
+14894:                 reader._close()
        ((struct __pyx_vtabstruct_7questdb_7_client__ReaderHandle *)__pyx_v_reader->__pyx_vtab)->_close(__pyx_v_reader, NULL);
/* … */
          ((struct __pyx_vtabstruct_7questdb_7_client__ReaderHandle *)__pyx_v_reader->__pyx_vtab)->_close(__pyx_v_reader, NULL);
+14895:             if handle is not None:
      __pyx_t_2 = (((PyObject *)__pyx_v_handle) != Py_None);
      if (__pyx_t_2) {
/* … */
      }
      goto __pyx_L8;
    }
    __pyx_L7_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_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;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 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_t_2 = (((PyObject *)__pyx_v_handle) != Py_None);
        if (__pyx_t_2) {
/* … */
        }
      }
      __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_L1_error;
      __pyx_L16_error:;
      __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_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;
      __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L8:;
  }
+14896:                 handle._end_db_use(scoped=False)
        __pyx_t_12.__pyx_n = 1;
        __pyx_t_12.scoped = 0;
        ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_handle->__pyx_vtab)->_end_db_use(__pyx_v_handle, &__pyx_t_12); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14896, __pyx_L1_error)
/* … */
          __pyx_t_12.__pyx_n = 1;
          __pyx_t_12.scoped = 0;
          ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_handle->__pyx_vtab)->_end_db_use(__pyx_v_handle, &__pyx_t_12); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14896, __pyx_L16_error)
 14897: 
+14898:     cdef void _release_finalizer_locked(self) noexcept:
static void __pyx_f_7questdb_7_client_12PooledReader__release_finalizer_locked(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self) {
  struct __pyx_obj_7questdb_7_client__ReaderHandle *__pyx_v_reader = 0;
  struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_last = 0;
  struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0;
  int __pyx_v_reclaimed;
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_WriteUnraisable("questdb._client.PooledReader._release_finalizer_locked", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_reader);
  __Pyx_XDECREF((PyObject *)__pyx_v_last);
  __Pyx_XDECREF((PyObject *)__pyx_v_handle);
  __Pyx_RefNannyFinishContext();
}
 14899:         """Release a GC-owned lease without waiting for a worker cursor."""
+14900:         cdef _ReaderHandle reader = self._reader
  __pyx_t_1 = ((PyObject *)__pyx_v_self->_reader);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_reader = ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)__pyx_t_1);
  __pyx_t_1 = 0;
+14901:         cdef _CursorHandle last = self._last_cursor
  __pyx_t_1 = ((PyObject *)__pyx_v_self->_last_cursor);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_last = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_1);
  __pyx_t_1 = 0;
+14902:         cdef QuestDB handle = self._handle
  __pyx_t_1 = ((PyObject *)__pyx_v_self->_handle);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_1);
  __pyx_t_1 = 0;
+14903:         cdef int reclaimed = 0
  __pyx_v_reclaimed = 0;
+14904:         if reader is None:
  __pyx_t_2 = (((PyObject *)__pyx_v_reader) == Py_None);
  if (__pyx_t_2) {
/* … */
  }
+14905:             return
    goto __pyx_L0;
 14906:         # Clear the lease first so even an unexpected cleanup exception cannot
 14907:         # make a later finalizer repeat active-use accounting.
+14908:         self._reader = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_reader);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_reader);
  __pyx_v_self->_reader = ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)Py_None);
+14909:         self._last_cursor = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_last_cursor);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_last_cursor);
  __pyx_v_self->_last_cursor = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)Py_None);
+14910:         self._handle = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_handle);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_handle);
  __pyx_v_self->_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)Py_None);
+14911:         if last is not None:
  __pyx_t_2 = (((PyObject *)__pyx_v_last) != Py_None);
  if (__pyx_t_2) {
/* … */
  }
+14912:             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_L10_try_end;
      __pyx_L5_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
      __pyx_L7_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_L6_exception_handled:;
      __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);
      __pyx_L10_try_end:;
    }
+14913:                 reclaimed = last._try_reclaim()
        __pyx_t_6 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_last->__pyx_vtab)->_try_reclaim(__pyx_v_last); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14913, __pyx_L5_error)
        __pyx_v_reclaimed = __pyx_t_6;
+14914:             except BaseException:
      __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
      if (__pyx_t_6) {
        __Pyx_ErrRestore(0,0,0);
+14915:                 reclaimed = -1
        __pyx_v_reclaimed = -1;
        goto __pyx_L6_exception_handled;
      }
      goto __pyx_L7_except_error;
+14916:         if reclaimed != -1:
  __pyx_t_2 = (__pyx_v_reclaimed != -1L);
  if (__pyx_t_2) {
/* … */
  }
 14917:             # Reclaim owns the cursor lock here, so no operation can still be
 14918:             # using this reader. A busy cursor instead retains `_reader_ref`
 14919:             # until its lock holder finishes; dropping the local references
 14920:             # leaves that cursor responsible for eventual reader teardown.
+14921:             reader._close()
    ((struct __pyx_vtabstruct_7questdb_7_client__ReaderHandle *)__pyx_v_reader->__pyx_vtab)->_close(__pyx_v_reader, NULL);
+14922:         if handle is not None:
  __pyx_t_2 = (((PyObject *)__pyx_v_handle) != Py_None);
  if (__pyx_t_2) {
/* … */
  }
+14923:             try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      goto __pyx_L20_try_end;
      __pyx_L15_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
      __pyx_L17_except_error:;
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_4, __pyx_t_3);
      goto __pyx_L1_error;
      __pyx_L16_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_4, __pyx_t_3);
      __pyx_L20_try_end:;
    }
+14924:                 handle._end_db_use(scoped=False)
        __pyx_t_7.__pyx_n = 1;
        __pyx_t_7.scoped = 0;
        ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_handle->__pyx_vtab)->_end_db_use(__pyx_v_handle, &__pyx_t_7); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14924, __pyx_L15_error)
+14925:             except BaseException:
      __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
      if (__pyx_t_6) {
        __Pyx_ErrRestore(0,0,0);
        goto __pyx_L16_exception_handled;
      }
      goto __pyx_L17_except_error;
 14926:                 # Finalizers cannot propagate. The fields were already cleared,
 14927:                 # so retrying would underflow the active-use count.
 14928:                 pass
 14929: 
+14930:     def __enter__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledReader_3__enter__(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_12PooledReader_3__enter__ = {"__enter__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledReader_3__enter__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_12PooledReader_3__enter__(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
) {
  #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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__enter__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__enter__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_12PooledReader_2__enter__(((struct __pyx_obj_7questdb_7_client_PooledReader *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_12PooledReader_2__enter__(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self) {
  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_10);
  __Pyx_AddTraceback("questdb._client.PooledReader.__enter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledReader_3__enter__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledReader___enter, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[265])); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 14930, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_17);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledReader, __pyx_mstate_global->__pyx_n_u_enter, __pyx_t_17) < (0)) __PYX_ERR(0, 14930, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+14931:         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(0, 14931, __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(0, 14931, __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(0, 14931, __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.PooledReader.__enter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(0, 14931, __pyx_L9_except_error)
          __Pyx_XGOTREF(__pyx_t_2);
          __Pyx_XGOTREF(__pyx_t_4);
          __Pyx_XGOTREF(__pyx_t_3);
          __pyx_t_10 = PyTuple_Pack(3, __pyx_t_2, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 14931, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_10, NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 14931, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          if (__pyx_t_12 < (0)) __PYX_ERR(0, 14931, __pyx_L9_except_error)
          __pyx_t_13 = (!__pyx_t_12);
          if (unlikely(__pyx_t_13)) {
            __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(0, 14931, __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(0, 14931, __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:;
  }
+14932:             self._check_open('__enter__')
          __pyx_t_9 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14932, __pyx_L7_error)
+14933:         return self
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;
 14934: 
+14935:     def query(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledReader_5query(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledReader_4query, "\n        Execute a SQL query on the lease's connection and return a\n        :class:`QueryResult`.\n\n        ``sql``, ``binds``, ``reset_symbol_dict`` and ``timeout`` behave\n        exactly as on :meth:`QuestDB.query`, except the query runs on the\n        reader this lease holds instead of a per-call pool borrow. The\n        previous query's result must be fully drained (or closed)\n        first; ``reset_symbol_dict=False`` reuses the connection's\n        SYMBOL dictionary built up by the lease's earlier queries.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledReader_5query = {"query", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledReader_5query, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledReader_4query};
static PyObject *__pyx_pw_7questdb_7_client_12PooledReader_5query(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_sql = 0;
  PyObject *__pyx_v_binds = 0;
  int __pyx_v_reset_symbol_dict;
  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("query (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_sql,&__pyx_mstate_global->__pyx_n_u_binds,&__pyx_mstate_global->__pyx_n_u_reset_symbol_dict,&__pyx_mstate_global->__pyx_n_u_timeout,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(0, 14935, __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(0, 14935, __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(0, 14935, __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, "query", 0) < (0)) __PYX_ERR(0, 14935, __pyx_L3_error)
/* … */
  /* 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_12PooledReader_4query(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self, PyObject *__pyx_v_sql, PyObject *__pyx_v_binds, int __pyx_v_reset_symbol_dict, PyObject *__pyx_v_timeout) {
  struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_cursor_handle = 0;
  struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_last = 0;
  int64_t __pyx_v_timeout_ms;
  struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0;
  int __pyx_v_outer_in_flight;
  unsigned long __pyx_v_outer_thread;
  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_15);
  __Pyx_AddTraceback("questdb._client.PooledReader.query", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_cursor_handle);
  __Pyx_XDECREF((PyObject *)__pyx_v_last);
  __Pyx_XDECREF((PyObject *)__pyx_v_handle);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_17 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 14935, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
/* … */
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14935, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_QueryResult) < (0)) __PYX_ERR(0, 14935, __pyx_L1_error)
  __pyx_t_25 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledReader_5query, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledReader_query, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[266])); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 14935, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_25);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_25, __pyx_mstate_global->__pyx_tuple[24]);
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_25, __pyx_t_17);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_25, __pyx_t_4);
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledReader, __pyx_mstate_global->__pyx_n_u_query, __pyx_t_25) < (0)) __PYX_ERR(0, 14935, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 14936:             self,
 14937:             str sql,
+14938:             object binds=None,
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
/* … */
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
 14939:             *,
+14940:             bint reset_symbol_dict=True,
      __pyx_v_reset_symbol_dict = ((int)1);
    }
    __pyx_v_timeout = values[3];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("query", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 14935, __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.PooledReader.query", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sql), (&PyUnicode_Type), 1, "sql", 1))) __PYX_ERR(0, 14937, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_12PooledReader_4query(((struct __pyx_obj_7questdb_7_client_PooledReader *)__pyx_v_self), __pyx_v_sql, __pyx_v_binds, __pyx_v_reset_symbol_dict, __pyx_v_timeout);
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_reset_symbol_dict, Py_True) < (0)) __PYX_ERR(0, 14935, __pyx_L1_error)
+14941:             object timeout=None) -> QueryResult:
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("query", 0, 1, 2, i); __PYX_ERR(0, 14935, __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(0, 14935, __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(0, 14935, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
/* … */
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_sql = ((PyObject*)values[0]);
    __pyx_v_binds = values[1];
    if (values[2]) {
      __pyx_v_reset_symbol_dict = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_reset_symbol_dict == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 14940, __pyx_L3_error)
    } else {
/* … */
  if (PyDict_SetItem(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_timeout, Py_None) < (0)) __PYX_ERR(0, 14935, __pyx_L1_error)
 14942:         """
 14943:         Execute a SQL query on the lease's connection and return a
 14944:         :class:`QueryResult`.
 14945: 
 14946:         ``sql``, ``binds``, ``reset_symbol_dict`` and ``timeout`` behave
 14947:         exactly as on :meth:`QuestDB.query`, except the query runs on the
 14948:         reader this lease holds instead of a per-call pool borrow. The
 14949:         previous query's result must be fully drained (or closed)
 14950:         first; ``reset_symbol_dict=False`` reuses the connection's
 14951:         SYMBOL dictionary built up by the lease's earlier queries.
 14952:         """
 14953:         cdef _CursorHandle cursor_handle
 14954:         cdef _CursorHandle last
 14955:         cdef int64_t timeout_ms
 14956:         cdef QuestDB handle
 14957:         cdef bint outer_in_flight
 14958:         cdef unsigned long outer_thread
+14959:         if binds is not None and not isinstance(binds, (list, tuple)):
  __pyx_t_2 = (__pyx_v_binds != Py_None);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = PyList_Check(__pyx_v_binds); 
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_3 = PyTuple_Check(__pyx_v_binds); 
  __pyx_t_2 = __pyx_t_3;
  __pyx_L6_bool_binop_done:;
  __pyx_t_3 = (!__pyx_t_2);
  __pyx_t_1 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+14960:             raise TypeError(
    __pyx_t_5 = NULL;
+14961:                 '"binds" must be a list or tuple of positional bind '
    __pyx_t_6 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_binds_must_be_a_list_or_tuple_o, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14961, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_8 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_6};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_8, (2-__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;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14960, __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(0, 14960, __pyx_L1_error)
+14962:                 f'parameters (or None), not {_fqn(type(binds))}')
    __pyx_t_6 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_binds)))); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14962, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 14962, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 14963:         # Validated before the lease is touched, so a bad argument is a
 14964:         # plain TypeError / ValueError and never disturbs the connection.
+14965:         timeout_ms = _query_timeout_to_millis(timeout)
  __pyx_t_9 = __pyx_f_7questdb_7_client__query_timeout_to_millis(__pyx_v_timeout); if (unlikely(__pyx_t_9 == ((int64_t)-2L))) __PYX_ERR(0, 14965, __pyx_L1_error)
  __pyx_v_timeout_ms = __pyx_t_9;
+14966:         with self._lock:
  /*with:*/ {
    __pyx_t_10 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 14966, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_6 = NULL;
    __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14966, __pyx_L8_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_8 = 1;
    #if CYTHON_UNPACK_METHODS
    if (likely(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_8 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __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_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14966, __pyx_L8_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __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;
        goto __pyx_L17_try_end;
        __pyx_L12_error:;
        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 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.PooledReader.query", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_15, &__pyx_t_4, &__pyx_t_7) < 0) __PYX_ERR(0, 14966, __pyx_L14_except_error)
          __Pyx_XGOTREF(__pyx_t_15);
          __Pyx_XGOTREF(__pyx_t_4);
          __Pyx_XGOTREF(__pyx_t_7);
          __pyx_t_6 = PyTuple_Pack(3, __pyx_t_15, __pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 14966, __pyx_L14_except_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_21 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_6, NULL);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 14966, __pyx_L14_except_error)
          __Pyx_GOTREF(__pyx_t_21);
          __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_21);
          __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
          if (__pyx_t_1 < (0)) __PYX_ERR(0, 14966, __pyx_L14_except_error)
          __pyx_t_3 = (!__pyx_t_1);
          if (unlikely(__pyx_t_3)) {
            __Pyx_GIVEREF(__pyx_t_15);
            __Pyx_GIVEREF(__pyx_t_4);
            __Pyx_XGIVEREF(__pyx_t_7);
            __Pyx_ErrRestoreWithState(__pyx_t_15, __pyx_t_4, __pyx_t_7);
            __pyx_t_15 = 0;  __pyx_t_4 = 0;  __pyx_t_7 = 0; 
            __PYX_ERR(0, 14966, __pyx_L14_except_error)
          }
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          goto __pyx_L13_exception_handled;
        }
        __pyx_L14_except_error:;
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
        goto __pyx_L1_error;
        __pyx_L13_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
        __pyx_L17_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_10) {
          __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_mstate_global->__pyx_tuple[3], NULL);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 14966, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        }
        goto __pyx_L11;
      }
      __pyx_L11:;
    }
    goto __pyx_L34;
    __pyx_L8_error:;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    goto __pyx_L1_error;
    __pyx_L34:;
  }
+14967:             self._check_open('query')
          __pyx_t_14 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_query); if (unlikely(__pyx_t_14 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 14967, __pyx_L12_error)
+14968:             handle = self._enter_call_locked()
          __pyx_t_4 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14968, __pyx_L12_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_4);
          __pyx_t_4 = 0;
+14969:             try:
          /*try:*/ {
+14970:                 last = self._last_cursor
            __pyx_t_4 = ((PyObject *)__pyx_v_self->_last_cursor);
            __Pyx_INCREF(__pyx_t_4);
            __pyx_v_last = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_4);
            __pyx_t_4 = 0;
+14971:                 if last is not None:
            __pyx_t_1 = (((PyObject *)__pyx_v_last) != Py_None);
            if (__pyx_t_1) {
/* … */
            }
+14972:                     if last._is_live():
              __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_last->__pyx_vtab)->_is_live(__pyx_v_last); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 14972, __pyx_L19_error)
              if (unlikely(__pyx_t_1)) {
/* … */
              }
+14973:                         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(0, 14973, __pyx_L19_error)
                __Pyx_GOTREF(__pyx_t_6);
+14974:                             QuestDBErrorCode.InvalidApiCall,
                __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 14974, __pyx_L19_error)
                __Pyx_GOTREF(__pyx_t_7);
                __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 14974, __pyx_L19_error)
                __Pyx_GOTREF(__pyx_t_15);
                __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
                __pyx_t_8 = 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_8 = 0;
                }
                #endif
                {
                  PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_15, __pyx_mstate_global->__pyx_kp_u_the_previous_QueryResult_is_stil};
                  __pyx_t_4 = __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_5); __pyx_t_5 = 0;
                  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
                  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
                  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14973, __pyx_L19_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(0, 14973, __pyx_L19_error)
 14975:                             'the previous QueryResult is still open: '
 14976:                             'drain it fully or close() it before '
 14977:                             'running the next query on this lease.')
+14978:                     if self._reader._must_close:
              if (unlikely(__pyx_v_self->_reader->_must_close)) {
/* … */
              }
+14979:                         raise QuestDBError(
                __pyx_t_6 = NULL;
                __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 14979, __pyx_L19_error)
                __Pyx_GOTREF(__pyx_t_15);
+14980:                             QuestDBErrorCode.InvalidApiCall,
                __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 14980, __pyx_L19_error)
                __Pyx_GOTREF(__pyx_t_5);
                __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 14980, __pyx_L19_error)
                __Pyx_GOTREF(__pyx_t_7);
                __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                __pyx_t_8 = 1;
                #if CYTHON_UNPACK_METHODS
                if (unlikely(PyMethod_Check(__pyx_t_15))) {
                  __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_15);
                  assert(__pyx_t_6);
                  PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_15);
                  __Pyx_INCREF(__pyx_t_6);
                  __Pyx_INCREF(__pyx__function);
                  __Pyx_DECREF_SET(__pyx_t_15, __pyx__function);
                  __pyx_t_8 = 0;
                }
                #endif
                {
                  PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_the_lease_s_connection_is_termin};
                  __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_15, __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_7); __pyx_t_7 = 0;
                  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
                  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14979, __pyx_L19_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(0, 14979, __pyx_L19_error)
 14981:                             "the lease's connection is terminal: the "
 14982:                             'previous query did not reach its terminal '
 14983:                             'frame, so its transport was torn down. close() '
 14984:                             'this lease and obtain a new one with '
 14985:                             'QuestDB.reader().')
 14986:                 # Restored rather than cleared: a query re-entered from this
 14987:                 # one's bind values must not end the outer one's guard.
+14988:                 outer_in_flight = self._query_in_flight
            __pyx_t_1 = __pyx_v_self->_query_in_flight;
            __pyx_v_outer_in_flight = __pyx_t_1;
+14989:                 outer_thread = self._query_thread
            __pyx_t_16 = __pyx_v_self->_query_thread;
            __pyx_v_outer_thread = __pyx_t_16;
+14990:                 self._query_in_flight = True
            __pyx_v_self->_query_in_flight = 1;
+14991:                 self._query_thread = PyThread_get_thread_ident()
            __pyx_v_self->_query_thread = PyThread_get_thread_ident();
+14992:                 try:
            /*try:*/ {
+14993:                     cursor_handle = _execute_query(
              __pyx_t_17.__pyx_n = 3;
              __pyx_t_17.reset_symbol_dict = __pyx_v_reset_symbol_dict;
              __pyx_t_17.owns_reader = 0;
              __pyx_t_17.timeout_ms = __pyx_v_timeout_ms;
              __pyx_t_15 = ((PyObject *)__pyx_f_7questdb_7_client__execute_query(((struct __pyx_obj_7questdb_7_client__ReaderHandle *)__pyx_t_4), __pyx_v_sql, __pyx_v_binds, &__pyx_t_17)); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 14993, __pyx_L25_error)
              __Pyx_GOTREF(__pyx_t_15);
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
              __pyx_v_cursor_handle = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_15);
              __pyx_t_15 = 0;
            }
+14994:                         self._reader, sql, binds, reset_symbol_dict, False,
              __pyx_t_4 = ((PyObject *)__pyx_v_self->_reader);
              __Pyx_INCREF(__pyx_t_4);
 14995:                         timeout_ms)
 14996:                 finally:
+14997:                     self._query_in_flight = outer_in_flight
            /*finally:*/ {
              /*normal exit:*/{
                __pyx_v_self->_query_in_flight = __pyx_v_outer_in_flight;
/* … */
                  __pyx_v_self->_query_in_flight = __pyx_v_outer_in_flight;
+14998:                     self._query_thread = outer_thread
                __pyx_v_self->_query_thread = __pyx_v_outer_thread;
                goto __pyx_L26;
              }
              __pyx_L25_error:;
              /*exception exit:*/{
                __Pyx_PyThreadState_declare
                __Pyx_PyThreadState_assign
                __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0;
                __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 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_24, &__pyx_t_25, &__pyx_t_26);
                if ( unlikely(__Pyx_GetException(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23) < 0)) __Pyx_ErrFetch(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23);
                __Pyx_XGOTREF(__pyx_t_21);
                __Pyx_XGOTREF(__pyx_t_22);
                __Pyx_XGOTREF(__pyx_t_23);
                __Pyx_XGOTREF(__pyx_t_24);
                __Pyx_XGOTREF(__pyx_t_25);
                __Pyx_XGOTREF(__pyx_t_26);
                __pyx_t_18 = __pyx_lineno; __pyx_t_19 = __pyx_clineno; __pyx_t_20 = __pyx_filename;
                {
/* … */
                  __pyx_v_self->_query_thread = __pyx_v_outer_thread;
                }
                __Pyx_XGIVEREF(__pyx_t_24);
                __Pyx_XGIVEREF(__pyx_t_25);
                __Pyx_XGIVEREF(__pyx_t_26);
                __Pyx_ExceptionReset(__pyx_t_24, __pyx_t_25, __pyx_t_26);
                __Pyx_XGIVEREF(__pyx_t_21);
                __Pyx_XGIVEREF(__pyx_t_22);
                __Pyx_XGIVEREF(__pyx_t_23);
                __Pyx_ErrRestore(__pyx_t_21, __pyx_t_22, __pyx_t_23);
                __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0;
                __pyx_lineno = __pyx_t_18; __pyx_clineno = __pyx_t_19; __pyx_filename = __pyx_t_20;
                goto __pyx_L19_error;
              }
              __pyx_L26:;
            }
+14999:                 self._last_cursor = cursor_handle
            __Pyx_INCREF((PyObject *)__pyx_v_cursor_handle);
            __Pyx_GIVEREF((PyObject *)__pyx_v_cursor_handle);
            __Pyx_GOTREF((PyObject *)__pyx_v_self->_last_cursor);
            __Pyx_DECREF((PyObject *)__pyx_v_self->_last_cursor);
            __pyx_v_self->_last_cursor = __pyx_v_cursor_handle;
          }
 15000:             finally:
+15001:                 self._exit_call_locked(handle)
          /*finally:*/ {
            /*normal exit:*/{
              ((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 15001, __pyx_L12_error)
              goto __pyx_L20;
            }
            __pyx_L19_error:;
            /*exception exit:*/{
              __Pyx_PyThreadState_declare
              __Pyx_PyThreadState_assign
              __pyx_t_26 = 0; __pyx_t_25 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0; __pyx_t_21 = 0;
              __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 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_23, &__pyx_t_22, &__pyx_t_21);
              if ( unlikely(__Pyx_GetException(&__pyx_t_26, &__pyx_t_25, &__pyx_t_24) < 0)) __Pyx_ErrFetch(&__pyx_t_26, &__pyx_t_25, &__pyx_t_24);
              __Pyx_XGOTREF(__pyx_t_26);
              __Pyx_XGOTREF(__pyx_t_25);
              __Pyx_XGOTREF(__pyx_t_24);
              __Pyx_XGOTREF(__pyx_t_23);
              __Pyx_XGOTREF(__pyx_t_22);
              __Pyx_XGOTREF(__pyx_t_21);
              __pyx_t_19 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_27 = __pyx_filename;
              {
                ((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 15001, __pyx_L30_error)
              }
              __Pyx_XGIVEREF(__pyx_t_23);
              __Pyx_XGIVEREF(__pyx_t_22);
              __Pyx_XGIVEREF(__pyx_t_21);
              __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_22, __pyx_t_21);
              __Pyx_XGIVEREF(__pyx_t_26);
              __Pyx_XGIVEREF(__pyx_t_25);
              __Pyx_XGIVEREF(__pyx_t_24);
              __Pyx_ErrRestore(__pyx_t_26, __pyx_t_25, __pyx_t_24);
              __pyx_t_26 = 0; __pyx_t_25 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0; __pyx_t_21 = 0;
              __pyx_lineno = __pyx_t_19; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_27;
              goto __pyx_L12_error;
              __pyx_L30_error:;
              __Pyx_XGIVEREF(__pyx_t_23);
              __Pyx_XGIVEREF(__pyx_t_22);
              __Pyx_XGIVEREF(__pyx_t_21);
              __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_22, __pyx_t_21);
              __Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
              __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
              __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
              __pyx_t_23 = 0; __pyx_t_22 = 0; __pyx_t_21 = 0;
              goto __pyx_L12_error;
            }
            __pyx_L20:;
          }
+15002:         return QueryResult(cursor_handle)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_mstate_global->__pyx_n_u_QueryResult); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 15002, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  if (unlikely(!__pyx_v_cursor_handle)) { __Pyx_RaiseUnboundLocalError("cursor_handle"); __PYX_ERR(0, 15002, __pyx_L1_error) }
  __pyx_t_8 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_15))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_15);
    assert(__pyx_t_4);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_15);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_15, __pyx__function);
    __pyx_t_8 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, ((PyObject *)__pyx_v_cursor_handle)};
    __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_15, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 15002, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
  }
  __pyx_r = __pyx_t_7;
  __pyx_t_7 = 0;
  goto __pyx_L0;
 15003: 
+15004:     def execute(self, str sql, object binds=None, *, object timeout=None):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledReader_7execute(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledReader_6execute, "\n        Run a statement on the lease's connection and discard whatever\n        it returns.\n\n        Mirrors :meth:`QuestDB.execute`, including the\n        :class:`ExecDone` ``(op_type, rows_affected)`` return value. The\n        result is drained\n        to its clean end, so the lease stays usable for the next call,\n        and the connection's SYMBOL dictionary is left untouched \342\200\224 an\n        interleaved statement does not invalidate a warm dictionary\n        built with ``reset_symbol_dict=False``.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledReader_7execute = {"execute", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledReader_7execute, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledReader_6execute};
static PyObject *__pyx_pw_7questdb_7_client_12PooledReader_7execute(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_sql = 0;
  PyObject *__pyx_v_binds = 0;
  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("execute (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_sql,&__pyx_mstate_global->__pyx_n_u_binds,&__pyx_mstate_global->__pyx_n_u_timeout,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(0, 15004, __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(0, 15004, __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(0, 15004, __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, "execute", 0) < (0)) __PYX_ERR(0, 15004, __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("execute", 0, 1, 2, i); __PYX_ERR(0, 15004, __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(0, 15004, __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(0, 15004, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_sql = ((PyObject*)values[0]);
    __pyx_v_binds = values[1];
    __pyx_v_timeout = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("execute", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 15004, __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.PooledReader.execute", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sql), (&PyUnicode_Type), 1, "sql", 1))) __PYX_ERR(0, 15004, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_12PooledReader_6execute(((struct __pyx_obj_7questdb_7_client_PooledReader *)__pyx_v_self), __pyx_v_sql, __pyx_v_binds, __pyx_v_timeout);

  /* 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_12PooledReader_6execute(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self, PyObject *__pyx_v_sql, PyObject *__pyx_v_binds, PyObject *__pyx_v_timeout) {
  struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0;
  PyObject *__pyx_v_result = 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_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_AddTraceback("questdb._client.PooledReader.execute", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_handle);
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_25 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 15004, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  if (PyDict_SetItem(__pyx_t_25, __pyx_mstate_global->__pyx_n_u_timeout, Py_None) < (0)) __PYX_ERR(0, 15004, __pyx_L1_error)
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledReader_7execute, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledReader_execute, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[267])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 15004, __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_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_mstate_global->__pyx_tuple[24]);
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_4, __pyx_t_25);
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledReader, __pyx_mstate_global->__pyx_n_u_execute_2, __pyx_t_4) < (0)) __PYX_ERR(0, 15004, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 15005:         """
 15006:         Run a statement on the lease's connection and discard whatever
 15007:         it returns.
 15008: 
 15009:         Mirrors :meth:`QuestDB.execute`, including the
 15010:         :class:`ExecDone` ``(op_type, rows_affected)`` return value. The
 15011:         result is drained
 15012:         to its clean end, so the lease stays usable for the next call,
 15013:         and the connection's SYMBOL dictionary is left untouched — an
 15014:         interleaved statement does not invalidate a warm dictionary
 15015:         built with ``reset_symbol_dict=False``.
 15016:         """
 15017:         cdef QuestDB handle
+15018:         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(0, 15018, __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(0, 15018, __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(0, 15018, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __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.PooledReader.execute", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4) < 0) __PYX_ERR(0, 15018, __pyx_L9_except_error)
          __Pyx_XGOTREF(__pyx_t_2);
          __Pyx_XGOTREF(__pyx_t_3);
          __Pyx_XGOTREF(__pyx_t_4);
          __pyx_t_20 = PyTuple_Pack(3, __pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 15018, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_20);
          __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_20, NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
          if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 15018, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_21 = __Pyx_PyObject_IsTrue(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          if (__pyx_t_21 < (0)) __PYX_ERR(0, 15018, __pyx_L9_except_error)
          __pyx_t_22 = (!__pyx_t_21);
          if (unlikely(__pyx_t_22)) {
            __Pyx_GIVEREF(__pyx_t_2);
            __Pyx_GIVEREF(__pyx_t_3);
            __Pyx_XGIVEREF(__pyx_t_4);
            __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_3, __pyx_t_4);
            __pyx_t_2 = 0;  __pyx_t_3 = 0;  __pyx_t_4 = 0; 
            __PYX_ERR(0, 15018, __pyx_L9_except_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;
          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_L11_try_return:;
        __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_L4_return;
        __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);
      }
    }
    /*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(0, 15018, __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_8 = __pyx_r;
        __pyx_r = 0;
        if (__pyx_t_1) {
          __pyx_t_7 = __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_7)) __PYX_ERR(0, 15018, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        }
        __pyx_r = __pyx_t_8;
        __pyx_t_8 = 0;
        goto __pyx_L0;
      }
      __pyx_L6:;
    }
    goto __pyx_L26;
    __pyx_L3_error:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L1_error;
    __pyx_L26:;
  }
+15019:             self._check_open('execute')
          __pyx_t_9 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_check_open(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_execute_2); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 15019, __pyx_L7_error)
+15020:             handle = self._enter_call_locked()
          __pyx_t_2 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15020, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_2);
          __pyx_t_2 = 0;
 15021:             # Held for the whole statement, as in every method of a lease:
 15022:             # the call count is then visible only to the thread running it.
+15023:             try:
          /*try:*/ {
+15024:                 result = self.query(
            __pyx_t_4 = ((PyObject *)__pyx_v_self);
            __Pyx_INCREF(__pyx_t_4);
+15025:                     sql, binds, reset_symbol_dict=False, timeout=timeout)
            __pyx_t_5 = 0;
            {
              PyObject *__pyx_callargs[3 + ((CYTHON_VECTORCALL) ? 2 : 0)] = {__pyx_t_4, __pyx_v_sql, __pyx_v_binds};
              __pyx_t_3 = __Pyx_MakeVectorcallBuilderKwds(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 15024, __pyx_L14_error)
              __Pyx_GOTREF(__pyx_t_3);
              if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_reset_symbol_dict, Py_False, __pyx_t_3, __pyx_callargs+3, 0) < (0)) __PYX_ERR(0, 15024, __pyx_L14_error)
              if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_timeout, __pyx_v_timeout, __pyx_t_3, __pyx_callargs+3, 1) < (0)) __PYX_ERR(0, 15024, __pyx_L14_error)
              __pyx_t_2 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_query, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_3);
              __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(0, 15024, __pyx_L14_error)
              __Pyx_GOTREF(__pyx_t_2);
            }
            __pyx_v_result = __pyx_t_2;
            __pyx_t_2 = 0;
+15026:                 try:
            /*try:*/ {
+15027:                     result._drain()
              __pyx_t_3 = __pyx_v_result;
              __Pyx_INCREF(__pyx_t_3);
              __pyx_t_5 = 0;
              {
                PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
                __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_drain_2, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
                __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
                if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15027, __pyx_L17_error)
                __Pyx_GOTREF(__pyx_t_2);
              }
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+15028:                     return result.exec_done
              __Pyx_XDECREF(__pyx_r);
              __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_result, __pyx_mstate_global->__pyx_n_u_exec_done); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15028, __pyx_L17_error)
              __Pyx_GOTREF(__pyx_t_2);
              __pyx_r = __pyx_t_2;
              __pyx_t_2 = 0;
              goto __pyx_L16_return;
            }
 15029:                 finally:
+15030:                     result.close()
            /*finally:*/ {
              __pyx_L17_error:;
              /*exception exit:*/{
                __Pyx_PyThreadState_declare
                __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_2); __pyx_t_2 = 0;
                __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
                __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 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_10 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_12 = __pyx_filename;
                {
                  __pyx_t_3 = __pyx_v_result;
                  __Pyx_INCREF(__pyx_t_3);
                  __pyx_t_5 = 0;
                  {
                    PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
                    __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_close, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
                    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
                    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15030, __pyx_L20_error)
                    __Pyx_GOTREF(__pyx_t_2);
                  }
                  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 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_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_10; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_12;
                goto __pyx_L14_error;
                __pyx_L20_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);
                __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;
                __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
                goto __pyx_L14_error;
              }
              __pyx_L16_return: {
                __pyx_t_18 = __pyx_r;
                __pyx_r = 0;
                __pyx_t_3 = __pyx_v_result;
                __Pyx_INCREF(__pyx_t_3);
                __pyx_t_5 = 0;
                {
                  PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
                  __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_close, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
                  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
                  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15030, __pyx_L14_error)
                  __Pyx_GOTREF(__pyx_t_2);
                }
                __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                __pyx_r = __pyx_t_18;
                __pyx_t_18 = 0;
                goto __pyx_L13_return;
              }
            }
          }
 15031:             finally:
+15032:                 self._exit_call_locked(handle)
          /*finally:*/ {
            __pyx_L14_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_13 = 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_ExceptionSwap(&__pyx_t_15, &__pyx_t_14, &__pyx_t_13);
              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_13);
              __pyx_t_11 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_19 = __pyx_filename;
              {
                ((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 15032, __pyx_L22_error)
              }
              __Pyx_XGIVEREF(__pyx_t_15);
              __Pyx_XGIVEREF(__pyx_t_14);
              __Pyx_XGIVEREF(__pyx_t_13);
              __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_14, __pyx_t_13);
              __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_13 = 0;
              __pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_19;
              goto __pyx_L7_error;
              __pyx_L22_error:;
              __Pyx_XGIVEREF(__pyx_t_15);
              __Pyx_XGIVEREF(__pyx_t_14);
              __Pyx_XGIVEREF(__pyx_t_13);
              __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_14, __pyx_t_13);
              __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
              __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
              __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
              __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0;
              goto __pyx_L7_error;
            }
            __pyx_L13_return: {
              __pyx_t_13 = __pyx_r;
              __pyx_r = 0;
              ((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 15032, __pyx_L7_error)
              __pyx_r = __pyx_t_13;
              __pyx_t_13 = 0;
              goto __pyx_L11_try_return;
            }
          }
 15033: 
+15034:     def close(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledReader_9close(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*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_12PooledReader_8close, "\n        Release the lease's reader connection. Idempotent.\n\n        A still-open (undrained) last result is freed first, which\n        tears down the connection; a connection whose last query reached\n        its terminal (a clean drain, a successful ``cancel()``, or a\n        server-side error) is returned to the pool, any other is dropped\n        and the pool refills on demand.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_12PooledReader_9close = {"close", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledReader_9close, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_12PooledReader_8close};
static PyObject *__pyx_pw_7questdb_7_client_12PooledReader_9close(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
) {
  #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);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("close", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("close", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7questdb_7_client_12PooledReader_8close(((struct __pyx_obj_7questdb_7_client_PooledReader *)__pyx_v_self));

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

static PyObject *__pyx_pf_7questdb_7_client_12PooledReader_8close(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self) {
  struct __pyx_obj_7questdb_7_client_QuestDB *__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_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.PooledReader.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_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledReader_9close, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledReader_close, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[268])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 15034, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledReader, __pyx_mstate_global->__pyx_n_u_close, __pyx_t_4) < (0)) __PYX_ERR(0, 15034, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 15035:         """
 15036:         Release the lease's reader connection. Idempotent.
 15037: 
 15038:         A still-open (undrained) last result is freed first, which
 15039:         tears down the connection; a connection whose last query reached
 15040:         its terminal (a clean drain, a successful ``cancel()``, or a
 15041:         server-side error) is returned to the pool, any other is dropped
 15042:         and the pool refills on demand.
 15043:         """
 15044:         cdef QuestDB handle
 15045:         # Reject re-entry from a cursor operation on this thread before
 15046:         # waiting for another thread's lease lock, and check again under the
 15047:         # lock in _release_locked().
+15048:         if self._query_blocks():
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_query_blocks(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 15048, __pyx_L1_error)
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+15049:             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(0, 15049, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+15050:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 15050, __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(0, 15050, __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_PooledReader_close_cannot_releas};
      __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(0, 15049, __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(0, 15049, __pyx_L1_error)
 15051:                 'PooledReader.close() cannot release a reader during a query.')
+15052:         if self._last_cursor is not None:
  __pyx_t_1 = (((PyObject *)__pyx_v_self->_last_cursor) != Py_None);
  if (__pyx_t_1) {
/* … */
  }
+15053:             self._last_cursor._check_not_driving(
    __pyx_t_9.__pyx_n = 1;
    __pyx_t_9.check_lock = 1;
    __pyx_t_8 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_self->_last_cursor->__pyx_vtab)->_check_not_driving(__pyx_v_self->_last_cursor, __pyx_mstate_global->__pyx_kp_u_PooledReader_close, &__pyx_t_9); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 15053, __pyx_L1_error)
 15054:                 'PooledReader.close', check_lock=True)
+15055:         with self._lock:
  /*with:*/ {
    __pyx_t_10 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 15055, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_4 = NULL;
    __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 15055, __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_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[2] = {__pyx_t_4, NULL};
      __pyx_t_2 = __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_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15055, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __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;
        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_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("questdb._client.PooledReader.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_6, &__pyx_t_4) < 0) __PYX_ERR(0, 15055, __pyx_L11_except_error)
          __Pyx_XGOTREF(__pyx_t_2);
          __Pyx_XGOTREF(__pyx_t_6);
          __Pyx_XGOTREF(__pyx_t_4);
          __pyx_t_3 = PyTuple_Pack(3, __pyx_t_2, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 15055, __pyx_L11_except_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_22 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_3, NULL);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 15055, __pyx_L11_except_error)
          __Pyx_GOTREF(__pyx_t_22);
          __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_22);
          __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
          if (__pyx_t_1 < (0)) __PYX_ERR(0, 15055, __pyx_L11_except_error)
          __pyx_t_23 = (!__pyx_t_1);
          if (unlikely(__pyx_t_23)) {
            __Pyx_GIVEREF(__pyx_t_2);
            __Pyx_GIVEREF(__pyx_t_6);
            __Pyx_XGIVEREF(__pyx_t_4);
            __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_6, __pyx_t_4);
            __pyx_t_2 = 0;  __pyx_t_6 = 0;  __pyx_t_4 = 0; 
            __PYX_ERR(0, 15055, __pyx_L11_except_error)
          }
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          goto __pyx_L10_exception_handled;
        }
        __pyx_L11_except_error:;
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
        goto __pyx_L1_error;
        __pyx_L10_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
        __pyx_L14_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_10) {
          __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_mstate_global->__pyx_tuple[3], NULL);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 15055, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        }
        goto __pyx_L8;
      }
      __pyx_L8:;
    }
    goto __pyx_L23;
    __pyx_L5_error:;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    goto __pyx_L1_error;
    __pyx_L23:;
  }
+15056:             self._check_not_mid_call('close')
          __pyx_t_8 = ((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_check_not_mid_call(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_close); if (unlikely(__pyx_t_8 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(0, 15056, __pyx_L9_error)
+15057:             handle = self._enter_call_locked()
          __pyx_t_2 = ((PyObject *)((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_enter_call_locked(__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15057, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_2);
          __pyx_t_2 = 0;
+15058:             try:
          /*try:*/ {
+15059:                 self._release_locked()
            ((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_release_locked(__pyx_v_self); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 15059, __pyx_L16_error)
          }
 15060:             finally:
+15061:                 self._exit_call_locked(handle)
          /*finally:*/ {
            /*normal exit:*/{
              ((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 15061, __pyx_L9_error)
              goto __pyx_L17;
            }
            __pyx_L16_error:;
            /*exception exit:*/{
              __Pyx_PyThreadState_declare
              __Pyx_PyThreadState_assign
              __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 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_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
              __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
               __Pyx_ExceptionSwap(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
              if ( unlikely(__Pyx_GetException(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19) < 0)) __Pyx_ErrFetch(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
              __Pyx_XGOTREF(__pyx_t_17);
              __Pyx_XGOTREF(__pyx_t_18);
              __Pyx_XGOTREF(__pyx_t_19);
              __Pyx_XGOTREF(__pyx_t_20);
              __Pyx_XGOTREF(__pyx_t_21);
              __Pyx_XGOTREF(__pyx_t_22);
              __pyx_t_14 = __pyx_lineno; __pyx_t_15 = __pyx_clineno; __pyx_t_16 = __pyx_filename;
              {
                ((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_exit_call_locked(__pyx_v_self, __pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 15061, __pyx_L19_error)
              }
              __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_17);
              __Pyx_XGIVEREF(__pyx_t_18);
              __Pyx_XGIVEREF(__pyx_t_19);
              __Pyx_ErrRestore(__pyx_t_17, __pyx_t_18, __pyx_t_19);
              __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0;
              __pyx_lineno = __pyx_t_14; __pyx_clineno = __pyx_t_15; __pyx_filename = __pyx_t_16;
              goto __pyx_L9_error;
              __pyx_L19_error:;
              __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_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
              __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
              __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
              __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0;
              goto __pyx_L9_error;
            }
            __pyx_L17:;
          }
 15062: 
+15063:     def __exit__(self, exc_type, exc_val, exc_tb):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_12PooledReader_11__exit__(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_12PooledReader_11__exit__ = {"__exit__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_12PooledReader_11__exit__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_12PooledReader_11__exit__(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
) {
  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_exc_type,&__pyx_mstate_global->__pyx_n_u_exc_val,&__pyx_mstate_global->__pyx_n_u_exc_tb,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(0, 15063, __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(0, 15063, __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(0, 15063, __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(0, 15063, __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(0, 15063, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, i); __PYX_ERR(0, 15063, __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(0, 15063, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 15063, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 15063, __pyx_L3_error)
    }
    __pyx_v_exc_type = values[0];
    __pyx_v_exc_val = values[1];
    __pyx_v_exc_tb = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 15063, __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.PooledReader.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_12PooledReader_10__exit__(((struct __pyx_obj_7questdb_7_client_PooledReader *)__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_12PooledReader_10__exit__(struct __pyx_obj_7questdb_7_client_PooledReader *__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_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.PooledReader.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_12PooledReader_11__exit__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PooledReader___exit, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[269])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 15063, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledReader, __pyx_mstate_global->__pyx_n_u_exit, __pyx_t_4) < (0)) __PYX_ERR(0, 15063, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+15064:         self.close()
  __pyx_t_2 = ((PyObject *)__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(0, 15064, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 15065: 
+15066:     def __dealloc__(self):
/* Python wrapper */
static void __pyx_pw_7questdb_7_client_12PooledReader_13__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7questdb_7_client_12PooledReader_13__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_12PooledReader_12__dealloc__(((struct __pyx_obj_7questdb_7_client_PooledReader *)__pyx_v_self));

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

static void __pyx_pf_7questdb_7_client_12PooledReader_12__dealloc__(struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_self) {
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_WriteUnraisable("questdb._client.PooledReader.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}
+15067:         if self._lock is not None:
  __pyx_t_1 = (__pyx_v_self->_lock != Py_None);
  if (__pyx_t_1) {
/* … */
  }
+15068:             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_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_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:;
    }
+15069:                 with self._lock:
        /*with:*/ {
          __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 15069, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_7 = NULL;
          __pyx_t_8 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 15069, __pyx_L10_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_9 = 1;
          #if CYTHON_UNPACK_METHODS
          if (likely(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_9 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
            __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_9, (1-__pyx_t_9) | (__pyx_t_9*__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_6)) __PYX_ERR(0, 15069, __pyx_L10_error)
            __Pyx_GOTREF(__pyx_t_6);
          }
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          /*try:*/ {
            {
              /*try:*/ {
/* … */
              }
            }
          }
          /*finally:*/ {
            /*normal exit:*/{
              if (__pyx_t_5) {
                __pyx_t_12 = __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_12)) __PYX_ERR(0, 15069, __pyx_L4_error)
                __Pyx_GOTREF(__pyx_t_12);
                __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
              }
              goto __pyx_L13;
            }
            __pyx_L13:;
          }
          goto __pyx_L20;
          __pyx_L10_error:;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          goto __pyx_L4_error;
          __pyx_L20:;
        }
+15070:                     self._release_finalizer_locked()
                ((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_self->__pyx_vtab)->_release_finalizer_locked(__pyx_v_self);
+15071:             except KeyboardInterrupt:
      __pyx_t_13 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_KeyboardInterrupt))));
      if (__pyx_t_13) {
        __Pyx_AddTraceback("questdb._client.PooledReader.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_8, &__pyx_t_7) < 0) __PYX_ERR(0, 15071, __pyx_L6_except_error)
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_7);
+15072:                 _rearm_interrupt()
        __pyx_f_7questdb_7_client__rearm_interrupt();
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        goto __pyx_L5_exception_handled;
      }
      goto __pyx_L6_except_error;
 15073: 
 15074: 
+15075: def _debug_new_pooled_reader_finalizer_owner(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_125_debug_new_pooled_reader_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_124_debug_new_pooled_reader_finalizer_owner, "Internal test seam for PooledReader's non-blocking GC path.");
static PyMethodDef __pyx_mdef_7questdb_7_client_125_debug_new_pooled_reader_finalizer_owner = {"_debug_new_pooled_reader_finalizer_owner", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_125_debug_new_pooled_reader_finalizer_owner, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_124_debug_new_pooled_reader_finalizer_owner};
static PyObject *__pyx_pw_7questdb_7_client_125_debug_new_pooled_reader_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
) {
  struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_cursor_handle = 0;
  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_new_pooled_reader_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_cursor_handle,&__pyx_mstate_global->__pyx_n_u_client,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(0, 15075, __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(0, 15075, __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(0, 15075, __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_pooled_reader_finalizer_owner", 0) < (0)) __PYX_ERR(0, 15075, __pyx_L3_error)
/* … */
  /* 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_124_debug_new_pooled_reader_finalizer_owner(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_cursor_handle, PyObject *__pyx_v_client) {
  struct __pyx_obj_7questdb_7_client_PooledReader *__pyx_v_lease = 0;
  struct __pyx_obj_7questdb_7_client__ReaderHandle *__pyx_v_reader = 0;
  struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_handle = 0;
  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_pooled_reader_finalizer_owner", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_lease);
  __Pyx_XDECREF((PyObject *)__pyx_v_reader);
  __Pyx_XDECREF((PyObject *)__pyx_v_handle);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_125_debug_new_pooled_reader_finalizer_owner, 0, __pyx_mstate_global->__pyx_n_u_debug_new_pooled_reader_finaliz, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[272])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 15075, __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_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_mstate_global->__pyx_tuple[24]);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_new_pooled_reader_finaliz, __pyx_t_4) < (0)) __PYX_ERR(0, 15075, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+15076:         _CursorHandle cursor_handle, object client=None):
      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("_debug_new_pooled_reader_finalizer_owner", 0, 1, 2, i); __PYX_ERR(0, 15075, __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(0, 15075, __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(0, 15075, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_cursor_handle = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)values[0]);
    __pyx_v_client = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_debug_new_pooled_reader_finalizer_owner", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 15075, __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_pooled_reader_finalizer_owner", __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(0, 15076, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_124_debug_new_pooled_reader_finalizer_owner(__pyx_self, __pyx_v_cursor_handle, __pyx_v_client);
 15077:     """Internal test seam for PooledReader's non-blocking GC path."""
+15078:     cdef PooledReader lease = PooledReader.__new__(PooledReader)
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_7questdb_7_client_PooledReader(((PyTypeObject *)__pyx_mstate_global->__pyx_ptype_7questdb_7_client_PooledReader), __pyx_mstate_global->__pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 15078, __pyx_L1_error)
  __Pyx_GOTREF((PyObject *)__pyx_t_1);
  __pyx_v_lease = ((struct __pyx_obj_7questdb_7_client_PooledReader *)__pyx_t_1);
  __pyx_t_1 = 0;
+15079:     cdef _ReaderHandle reader = _ReaderHandle()
  __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__ReaderHandle, __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(0, 15079, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_1);
  }
  __pyx_v_reader = ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)__pyx_t_1);
  __pyx_t_1 = 0;
 15080:     cdef QuestDB handle
+15081:     cursor_handle._attach(NULL, reader, False)
  ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_cursor_handle->__pyx_vtab)->_attach(__pyx_v_cursor_handle, NULL, __pyx_v_reader, 0);
+15082:     if client is None:
  __pyx_t_4 = (__pyx_v_client == Py_None);
  if (__pyx_t_4) {
/* … */
    goto __pyx_L3;
  }
+15083:         lease._attach(None, reader)
    ((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_lease->__pyx_vtab)->_attach(__pyx_v_lease, ((struct __pyx_obj_7questdb_7_client_QuestDB *)Py_None), __pyx_v_reader);
 15084:     else:
+15085:         handle = client
  /*else*/ {
    __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(0, 15085, __pyx_L1_error)
    __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_1);
    __pyx_t_1 = 0;
+15086:         handle._begin_db_use(
    __pyx_t_6.__pyx_n = 1;
    __pyx_t_6.scoped = 0;
    __pyx_t_5 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_handle->__pyx_vtab)->_begin_db_use(__pyx_v_handle, __pyx_mstate_global->__pyx_n_u_debug_new_pooled_reader_finaliz, &__pyx_t_6); if (unlikely(__pyx_t_5 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 15086, __pyx_L1_error)
 15087:             '_debug_new_pooled_reader_finalizer_owner', scoped=False)
+15088:         lease._attach(handle, reader)
    ((struct __pyx_vtabstruct_7questdb_7_client_PooledReader *)__pyx_v_lease->__pyx_vtab)->_attach(__pyx_v_lease, __pyx_v_handle, __pyx_v_reader);
  }
  __pyx_L3:;
+15089:     lease._last_cursor = cursor_handle
  __Pyx_INCREF((PyObject *)__pyx_v_cursor_handle);
  __Pyx_GIVEREF((PyObject *)__pyx_v_cursor_handle);
  __Pyx_GOTREF((PyObject *)__pyx_v_lease->_last_cursor);
  __Pyx_DECREF((PyObject *)__pyx_v_lease->_last_cursor);
  __pyx_v_lease->_last_cursor = __pyx_v_cursor_handle;
+15090:     return lease
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_lease);
  __pyx_r = ((PyObject *)__pyx_v_lease);
  goto __pyx_L0;
 15091: 
 15092: 
+15093: def _debug_registered_connection_listener(Sender sender):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_127_debug_registered_connection_listener(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_126_debug_registered_connection_listener, "Internal test seam: the target the native dispatcher receives for\n    ``sender``'s ``connection_listener``, or ``None``.\n\n    That target is the sender's dispatch context, which\n    `_debug_connection_event_dispatch` dispatches exactly as the sender's\n    own dispatcher thread would.");
static PyMethodDef __pyx_mdef_7questdb_7_client_127_debug_registered_connection_listener = {"_debug_registered_connection_listener", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_127_debug_registered_connection_listener, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_126_debug_registered_connection_listener};
static PyObject *__pyx_pw_7questdb_7_client_127_debug_registered_connection_listener(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_Sender *__pyx_v_sender = 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_registered_connection_listener (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_sender,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(0, 15093, __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(0, 15093, __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_registered_connection_listener", 0) < (0)) __PYX_ERR(0, 15093, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_registered_connection_listener", 1, 1, 1, i); __PYX_ERR(0, 15093, __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(0, 15093, __pyx_L3_error)
    }
    __pyx_v_sender = ((struct __pyx_obj_7questdb_7_client_Sender *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_debug_registered_connection_listener", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 15093, __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_registered_connection_listener", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sender), __pyx_mstate_global->__pyx_ptype_7questdb_7_client_Sender, 1, "sender", 0))) __PYX_ERR(0, 15093, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_126_debug_registered_connection_listener(__pyx_self, __pyx_v_sender);
  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_126_debug_registered_connection_listener(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_7questdb_7_client_Sender *__pyx_v_sender) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_127_debug_registered_connection_listener, 0, __pyx_mstate_global->__pyx_n_u_debug_registered_connection_lis, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[273])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 15093, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_registered_connection_lis, __pyx_t_4) < (0)) __PYX_ERR(0, 15093, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 15094:     """Internal test seam: the target the native dispatcher receives for
 15095:     ``sender``'s ``connection_listener``, or ``None``.
 15096: 
 15097:     That target is the sender's dispatch context, which
 15098:     `_debug_connection_event_dispatch` dispatches exactly as the sender's
 15099:     own dispatcher thread would."""
+15100:     if sender._connection_listener is None:
  __pyx_t_1 = (__pyx_v_sender->_connection_listener == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+15101:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+15102:     return sender._dispatch_context
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_sender->_dispatch_context);
  __pyx_r = __pyx_v_sender->_dispatch_context;
  goto __pyx_L0;